Firstly, before anything else, I am speaking at this year’s Roguelike Celebration. Here’s the info about my talk:
You’ll note this is something that hasn’t yet been shown off on the blog, but I have an update on this planned to coincide with the talk :). It’s all insanely exciting development for 0.11 and I’m so keen to show it all off. In the meantime, though, here’s the (updated) current status of 0.11’s development, where BLUE denotes something finished and GREEN denotes something currently being worked on:
- You can drop items
- You can pick items up
- You can use items (whatever that means for the item in question)
- You can destroy items (very rarely an item might have something hidden inside it…!)
- You can show items (e.g. to someone else)
- Generate the images for all 25+ archetypes of religious relics, and place them in religious buildings
- Update and transform things like religious beliefs, things religions dislike, information about religious histories, holy books, etc
- Enable the player to join and leave a religion
- Far more complex interactions with priests etc
- Develop proper model for “membership” in religions, nations, cults, etc
- Treasure maps spawn in shops just like non-treasure maps do
- Zoomed-out treasure maps correctly show relevant locations
- Zoomed-in treasure maps correctly show relevant locations (far more complex)
- High-value items are, indeed, under the ground where a map points!
- Riddle treasure maps exist and are logically generated, and solvable
- These will become, for now, the game’s primary objective(rather than, as they will be later, one aspect of many)
- Implement procedurally generated statues of many types
- Implement aging, death, diseases, health, statuses
- Implement weather and phases of the moon
- Upgrade speech generation and conversation system
MORE OPTMIZATIONS / BUG FIXING / POLISHING
- Purge all known bugs (current count: 110 resolved)
- Further speed up map generation
- Further speed up turn-by-turn rendering
- Try to speed up world generation as well?
And now let’s get started with this month’s updates:
Firstly, the player can now perish if the number of years they spend on earth simply becomes too high. However, I don’t want this to be something that just happens suddenly as that would be only frustrating (you’ve had a character for 50 in-game years, you’re just approaching the end of a core quest, and then your character suddenly keels over and you’re done), so I gave some thought about how this could work in order to balance realism / sense, and gameplay and lack of frustration, pretty equally. I’m very happy with what I’ve come up with!
So: this is how the system works. When the player starts a new game – keeping in mind that in the near future you’ll be starting at a university as a student, first coming into the discovery of some strange knowledge that begins the main quest – you’ll be 22. I debated making it lightly random but then I know players will restart until getting the youngest age in order to maximize the potential oldest age, and we don’t want that, so now you just start at 25. Below that seemed too young, and obviously university systems in the late medieval / Scientific Revolution / Renaissance combined setting of URR were very different from those we have currently, but I think 22 is a good starting age. You will then, of course, age with each passing day, week and year as the game goes on, remembering that each time you move to a new map tile a day passes, getting in ships to sail somewhere increments an appropriate amount of days to get you to your destination, overland fast travel via carriage (once implemented) will have a similar effect, and so on and so forth. The world is 250×250 map tiles, so going from the absolute north to the absolute south via a direct route (and assuming you have all the required supplies and things to survive the journey) would be 250 days, so the better part of a year. This is also the case for going from the far west to the far east, and vice versa. In turn the player will sometimes have reason to wait for something but it will normally just be within a given day/night cycle (e.g. the time a merchant shows up at their shop), though rarely it could be waiting for as long as a week (for a particular person who only goes somewhere once a week, for instance). This means the player will have plenty of time to do everything they want to do, but not an infinite amount of time either. The player’s age / an NPC’s age can also now be seen thusly:
I’m then, in turn, working with 85 being the standard age. As has been well documented the whole “everyone died in their 40s before the modern era” thing is complete nonsense, and given that the player will be living a life of travel, adventure, and physical exertion, and we’re in an era before the rise of readily-available garbage food, this is certainly towards the upper end of things but far from in any way unrealistic or impossible. This number was therefore chosen partly because it’s a reasonable figure (the realism part), and because I want to give the player a decent amount of time to actually survive (the gameplay part) – so I think 85 is a fine standard target. However, some things will decrease that maximum age. The more times you are seriously unwell – hypothermia, sunstroke, things of this sort – your maximum age will be slightly reduced (though this will not be shown explicitly to the player, as it certainly isn’t in real life!), and I’m sure the more time you spend consuming in-game alcohol (I’d avoid this) will have some effect on your lifespan, and serious injuries and the like might also have a bad effect. Spending time in jail for instance will not reduce your maximum life span, but will of course consume some period of time (depending on what you’re being punished for), so that’ll be a strategic thing to consider when you might wonder whether or not to break a law in a civilization that punishes miscreants with imprisonment.
Then, once you reach five years below your “max” lifespan, you’ll get a special message on screen. In the future I intend to have the game generating hundreds – if not thousands – of possible events that can happen while travelling the world, but this is essentially the first of those. As such I spent a little bit of time creating a general screen and general functionality for events of this sort to happen, and then the very first one – the plyer approaching the end of their life – has now been implemented. It looks like this:
So this message – and like I say, we might later have other events using this function, but for now the five-year death warning (“FYDW”, as we call it) is the only event that the player can currently encounter. Encountering this event essentially starts a timer of five years, after which the chance of demise grows with each passing year. Three months before death you then get another message…
…and then, finally, here is another event for death (and I’ve also replaced the current minor death note from death in desert / ice with this), which gives you a little story about your demise (rather like the generated story that appears when you jump on a ship). To wit:
And actually, here are some other generated death messages for other death contexts:
So there we go! I really like this addition, not just because it’s an especially vital one compared to many other features, but I like the growing feeling that more and more elements of a central core playthrough are gradually falling into place, one by one. It’s also cool to have developed an event system which can both generate a message, and give the player a range of possible options they can select, as this is going to have a lot of value later on. As such, lastly, this is not an actual event in the game, but just so show this broader functionality of the event system, here’s an example of the sort of event we might be adding in later on which could lead to a huge range of different outcomes depending on who you are, how you look, how you interact with these people, and so forth…
…though not just yet!
(But imagine that event, expanded to maybe over a hundred archetypes, all with procedurally-generated details…)
Keys (and locks) are going to become a key (sorry) part of the game, and as a result I’ve gone back to the image generator for keys. I worked on this years ago and having now reactivated the generator and taken a look, what I see is honestly pretty poor. The initial model was to have three “ranks” of keys, and the generated keys that came out of it looked like this:
I try not to bash my earlier work too much – some of it is actually pretty good – but these are honestly pretty hideous. It’s okay, dear reader, you can say it; I won’t be offended. They’re hideous. However, my skills in procedurally generating ANSI graphics in URR have advanced somewhat since the earlier days of the game and so it was time to begin by totally transforming how keys look. I started a brand new generator with entirely new code for selecting colours and visuals, although I stuck to the same basic idea of three possible ranks of keys (“high”, “medium”, “low”) while also adding in the other sorts of keys that would be appropriate for the various sorts of chests in the game, i.e. keys for religious things, and keys for cult-related things, as well. Each key “rank” has a huge range of possible tops – with most of them being shaped according to the shape preferences of the civilization they come from – and a huge range of possible bottoms, with the teeth of the key becoming more complex and intricate the more elite the key, while the religious keys I gave complex but also just slightly weird or “unrealistic” teeth simply in order to distinguish them further from the other key types. By my count there are several tens of thousands of possible keys and the game will keep track of ones you have seen in order to always try to make a new key actually distinct from those already witnessed – and I don’t anticipate keys being hugely common items, so this should work nicely – and with that we have a new generator. My goodness, these new ones really are quite a bit nicer, aren’t they:
I also of course like the idea of the shaping of the keys being a hint to what civilization the key might find use in, while the colourings of the religious keys – I’ve only shown red ones here that might be appropriate for a demonic god, but all kinds of colours can appear for the keys just as they can for chests and altars and religious robes and all the other stuff – will show the observant player what religion the key might find some use in (for a chest, or a priest’s quarters, or a secret chamber in their cathedral, or whatever else it might be). Again a core objective here is to integrate the visuals as not just something pretty to look at – although I hope they are! – but also a place where information can sometimes be found and gleaned to help the player figure out what to do and where to go next, or where something might be hidden or some objective might be accomplished.
Open areas and fast travel
In previous weeks (i.e. the weeks that led up to an earlier update) I built in a system for the game to now recognise any new door that the player sees as such, and – if that door is of consequence and belongs to an important building – that building will be added automatically to your list of potential fast travel destinations. That works for almost all of the structures in the game world, but there’s a couple of other possible places that should be showing up on the fast-travel list but don’t actually include doors. This, for instance, might mean a park in a middle-class housing district, or a training ground in a city centre, or a graveyard in a town (which at least has an entrance, though not a door). I therefore needed to find some way to – in a very computationally-efficient way – have the game check whether you’re looking at an important tile, and if the thing that important tile is a part of hasn’t yet been added to the fast travel list, then it needs to get added in, like it does for doors and the like:
One way of course to do this would be to have each grid generate with a list of tiles that are important, but checking those every turn and checking them against every tile the player could see is hardly the most efficient thing (especially at a time when I’m trying to speed up basically everything in the game). Another option would be to give each tile a yes/no value of some sort telling whether it’s important or not and have those checked for every in-vision tile, but again this is hugely time-consuming and after you first discover Thing X, the game would still always be constantly checking for whether or not you need to discover Thing X every time you’re back there.
I can’t do anything that is going to meaningfully slow the game down in any way, so instead, I settled on a system where the game selects a number of points at which one can see an open-area place, and only stores those (no more than a dozen in a map grid), and then checks those against your eye-line whenever you’re wandering around in that map grid. This is so fast is takes < 1/1000th of a second, so it doesn’t exactly slow down the game’s speed when you’re walking around, but the game now correctly offers the player the ability to recognise, and hence later fast travel to, open air places such as parks…
And so here I can find an open-air area (in this case a military base), move well away, and then fast travel back:
We still need to add fast travelling for one last thing (outdoor shops in fortresses), but these are more key additions to making sure the fast travel system actually accomplishes what it is meant to, i.e. speeding up and making as smooth and efficient as possible the player’s navigation of the game world. I’m really pleased with this solution – it runs very nicely, it never feels like you’ve seen something without it actually registering as having been seen as a fast travel location, and allows you to jump straight to the remaining areas that needed to be added. The solution will really nowhere near as hard or complex as I had feared, so overall I’m very pleased with this little addition.
This week have another bunch of new statue possibilities being added to the generator. In the first case as well as the various sorts of heads that they can have depending on the nature of the god in question – demonic heads, animal heads, helmeted heads, and so forth – and the bottom / bodies vary across things like armour and robes, I decided to add a few more very rare permutations. There is now a new set of bottom-halves which are all unique and very hand-made components, and there will never be more than one or two of these showing up within a given generated world in order to make sure that they appear rare and unusual. These will of course also be reflected in the description of a god in question, so adherents will note that their god is half-fish, or half-snake, or whatever it might be. Again, I love how these look, and they add some really nice rare variation into what’s already there:
I have also now implemented two key aspects of more realistic / human statues, i.e. the statues for contemporary or historical human figures, rather than religious figures. A large number of the humanoid (although some of the statues are now only barely humanoid!) statues are going to be those which you can find in religious buildings and the like, but in other places I want to make sure that other statues for human figures can spawn as well. I have to say that making human faces on such a small scale with so few characters available, and having to fit into a very small space, was actually very tricky, but I think these female and male faces are actually pretty reasonable. I then also added in various sorts of clothing, and here we see two examples of these, the “dress” and the “medal shirt” variation (so the latter would obviously be a statue of a great military commander, for instance, whereas the left-hand side one could indeed be a god, but could also be a historical figure who was something to do with, in this case, death and the world… whatever that would be!). Again, I’m very happy with how these look, and I’ll be starting to get these non-god humanoid statues spawning in other places, and the statues will be tied to particular historical figures again – so perhaps a certain historical military commander had five medals, and you know that there’s something hidden inside that statue, so you need to find the statue with exactly five medals pinned to the chest…
Food and survival
I have now removed the need for food when travelling around the world. I felt this was actually becoming quite frustrating and limiting the ability to explore, but I do like the idea that some extreme climates (deserts, ice caps) require special planning, so that’s what I’ve moved to instead. You now still need water to safely traverse the desert, and supplies to safely traverse the ice caps, but the rest of the world’s terrain can be safely navigated without needing anything special. I think this will really enhance the player’s ability to explore, while also making sure that we get a sense that some areas do require planning and strategic decisions, are far riskier and more dangerous, and hence something to properly think about and properly plan for. As such, food supplies are no longer available…
…and you will note in some of these screenshots that food, and the two ailments I had associated with it, no longer appear on the sidebar, nor in the health screen…
…and the survival entry in the encyclopedia has been updated:
I think this is honestly a much better balance, and should make the game far more accessible while still maintaining some degree of strategy or planning to make your way across some of the more challenging areas in the game world!
Complete redevelopment of message system
For a long while now one of the most common (and accurate) bits of feedback has been around the difficulty of reading some of the game’s text – especially when it’s more densely packed, and there’s a lot there to read. This is completely valid, and is also important to consider when we think about the key role that books are going to be playing in the fairly near future. This is most commonly at the moment, however, an issue for the message window at the bottom. As such, one of the main changes I’ve made this month has been to add an extra blank line of space between each message. This might seem like a tiny thing but the original message system was very hand-made and took a bit of wrangling to make it behave how I now wanted it to, especially in a way that would print longer messages as a sequence before then leaving a gap between others – but with a little bit of fiddling the thing was done. And I have to say – it’s a small change on one level, but what a difference it makes!
I think the message window is now much more readable and far more pleasant on the eye, and it’s much easier in play to notice when a new message appears, rather than it sometimes seeming a little bit visually lost or blurred in the set of other messages. It’s only a small UI improvement, but I think it matters.
This is not the only major change, however. Pressing ‘m’ will now take you a special screen where you can scroll up and down your message log as you please, all the way back to 100 entries before the current message you’ve most recently seen. Having access to a far longer log of messages is a pretty standard thing in most roguelikes, and long overdue, especially now that we’re finally getting in some core gameplay quest, some ways to be injured or even killed, and so forth. Here’s an example of what happens when you press ‘m’ – it just takes up the main full body of the screen by giving you all the relevant messages that you can see:
Then, finally, using the up/down keys let you scroll up and down, as shown here:
And there we go – another nice polish finished and implemented!
Sidebar, weather, and moon
In another rather neat development, URR now tracks the phases of the moon, and the weather wherever the player might be. In the case of the moon I went with a 32 day cycle – since that divides nicely by 8, and so does 24, but 24 felt just a little bit too rapid – with four days in each of the moon’s eight main phases (full, waning gibbous, third quarter, waning crescent, new moon, waxing crescent, first quarter, waxing gibbous) which updates on the left-hand sidebar. I don’t want to say how phases of the moon will be used, but given the nature of the game being developed here, I am sure long-term readers will appreciate how this can be (and will be) yet another element to be woven into the game’s mysteries and highly specific generated riddles and puzzles. (And who knows, perhaps there are secrets inks that only reveal something under the light of the right phase of the moon… but that would be madness, surely?!)
As for weather, the game now keeps a good track of the weather at the player’s location, and this changes four times each day (dawn, day, dusk, night) as time elapses. One thing to note is that the game doesn’t track the weather in every single location every day – as that will just add a bunch more processing time for little value – so instead I implemented a rather crafty system where essentially the player has a weather system localised around them, and the weather system changes with time but also with the terrain (desert, temperate, taiga, whatever) the player is moving around on. To reflect this information we have a whole bunch of new stuff in the sidebar! You’ll see the phase of the moon information here, but also underneath it are the six elements of the weather – sun, cloud, rain, wind, fog, and snow. Here, for example, we see the player during daytime, on a day with a full moon, and it’s sunny but also a lot of cloud (shortly after this screenshot these were made mutually exclusive, as they should be):
And here we have the player exploring a polar region, which is currently coated with snow and fog, and very little sun to be seen beyond the clouds:
Another change that needed making was reducing message spam, so I think compressed these two standard day-iterating messages ^ into a single one, and then developed a system for telling the player how the weather has changed since they were last given information. What was interesting about this system is that it has to be able to handle what happens when the time of day changes (dawn, day, dusk, night), but also if you’re in the fast travel menu and a full day increments, which means that four possible weather changes will have taken place essentially “instantly” in that one day gap. This meant creating a function in which you can input any kind of opening set of weather, any kind of ending set of weather, and create some sensible sentences to reflect and relate the changes. I think these read nicely!
As with the phases of the moon, weather systems might also be integrated into the game’s procedurally generated clues. For instance, perhaps one is told about a certain area where it always snowing heavily and always heavily fogged – and something is to be found there, on the exact right map tile where the described conditions are found. As with other information I want this just smoothly, quietly introduced into everything else – so perhaps you are reading a book about a certain animal, and in passing it is mentioned that in the process of the author’s research they found a ruined building containing a large colony of the animal, in an area with a particular weather system… before then just moving back on with the rest of the book’s narrative. Every single one of those mentions should always be able to lead the player to something of note, something of interest, and the weather system is no different. I’m also going to have these weather systems change how the in-game world actually looks (i.e. you should be able to see snow on the ground, or have a reduced range of vision if it’s very foggy, and so on) but I haven’t quite got around to that yet – and maybe they’ll also influence combat!
World gen polish
To almost finish this update, I’ve added a few little polishes to the world generation screens. Firstly I’ve added a little “x/7” counter to each step of the world generation so that the new player knows roughly how much longer the process is going to take. I know this can take a minute or two so I figured that this was a nice additional way to just convey that it won’t take that long, that the generator is making good progress, and they’ll be into playing pretty soon. As I’ve mentioned before I am actually keen to see whether I can find ways to significantly speed up world generation as part of 0.11 – a lot of this code was written literally a decade ago when I was still teaching myself Python, let alone working out how to actually optimize and polish my Python code – so I’m sure there’s quite a lot which could be potentially improved here later on. Anyway, here’s an example of this new counter on one of the world generation screens:
It’s a small thing, but I think a good addition. I’ve also gone back to the sixth of these, the “Generating knowledge” screen, and changed the writing on the spines of the books from just a random selection of dashes to some of the actual non-Latin characters used in the game! This looks so much cooler and I’m really happy with how it looks, and it gives the observant player who is paying attention to the images showing up in world-gen that these might exist in the game. Of course, they aren’t actually fully implemented yet (though they can be seen on things like language books) but I think this is another good way to just subtly convey some of the things the player might want to be aware of and thinking about in the game world. As such, the generating knowledge screen has changed from this…
…and I think this looks way more interesting. Again, minor changes, but these are some of the earliest things a new player sees, so I think it’s important to give the “right impression” here.
0.10.2 is coming
Last, but not least – I intend to release a 0.10.2 version of the game in the coming weeks, ideally before the Roguelike Celebration. I know that the event will bring in a lot of new traffic and so I’m keen to have a version out with as much polish and bug-fixing as possible for new people to play. If you’re interested in being a playtester for this new version (which will have quite a few of the features I’ve been talking about in the updates over the past half-year!), then 1) I am hugely grateful, and 2) please email me by putting the bit of this website address between “www.” and “.com” in front of “@gmail.com”, and I’ll send you along a testing version once I have it.
Bugs and polishes
- Towns now always correctly spawn the new buildings / structures (wells, icehouses, granaries) when appropriate, and they show up as fast travel options, generate correctly inside, etc etc.
- Fixed a VERY long-running bug where the field of view renders incorrectly if you’re at the 0 or 199 coordinates on the local map, i.e. on the edge of in the corner. This took a lot of hunting down over several sessions but should now be completely resolved.
- Fixed a number of small issues with some rare religious symbols not being able to properly generate the appropriate symbol statue for outside a religious building.
- Fixed a minor graphical bug with some turbans not correctly displaying with two colours that were meaningfully different from each other (i.e. a lighter and a darker colour that should have a proper amount of contrast between them).
- Rings and necklaces (and crowns!) correctly note in their lookup description whether or not somebody is currently wearing them (i.e. the player, or an NPC).
- Fixed a possible generation where no civilizations would have the “cultism” religious option and thus a whole bunch of things wouldn’t really work properly. We are now guaranteed to have at least one civilization that thinks cults are a really cool idea.
- The game no longer says “You enter the building” if you try to enter a currency exchange and can’t because there’s nothing to exchange.
- Civilization names no long trail across the screen sometimes when you’re on the loading screen and a civilization discovered in that save has a much longer than average name.
- I have massively increased the speed with which the game can render the face of a character.
- Fast travel to and from wells now works correctly both in cities and in towns.
- Fixed an issue where a very rare set of religious buildings could generate with wings containing nothing in them, rather than the usual chairs, tables, prayer mats, statues, and so on.
- Items with extremely long names are now shortened with a “…” in your inventory so that, when looking at one of them, the key commands for any other items (‘a’, ‘b’, ‘c’, etc) remain visible to the player.
- Fixed a rare issue with the game not being able to generate enough monasteries to fill up a nation’s “quota” (for things like relevant historical figures, titles of books about each monastery, things of this sort), which could later lead to a crash. The game now gradually relaxes its monastery spawning requirements as time goes by during world generation, so that in the roughly 1/50 times it can’t spawn a monastery at the “strictest” level, it will always be able to spawn a bunch with the milder requirements.
- Multi-god altars no longer lightly re-generate a small part of themselves in a different manner each time you look at them (whoops!).
- Fixed an issue with some prayer mats sometimes having colours that are so similar to each other that they blur / blend a little bit into a single visual mass, instead of something that actually has clear and noticeable patterns.
- Entering granaries no longer causes a very rare crash bug.
- Fixed a crash bug where sometimes statues that are up hill, or down hill, from the player did not render correctly and the game wasn’t sure what to do.
- Fixed a rare issue with a small number of plants – around 1/300 I think – not generating correctly when the player looks at them, and instead just offering a blank image.
- Fixed a crash bug where being on foot outside a city, and then entering a city, would show the city menu twice (the one where you buy supplies, exchange currency, etc) instead of once, and then crash at the end of the second one, regardless of the option chosen on the second menu.
As ever, if you enjoyed this post and appreciate the time I take to write these things up, please do think about sharing it around! I’ll be back with the next update some time in the middle of October, and it’s going to be an absolutely awesome one (procedurally generated riddles!), and so I’ll see you all then :).