Version 0.3, “Ziggurats”, Released!

After seven months of development, I am proud to announce the release of Ultima Ratio Regum v0.3! 

Main Additions:

16 hand-drawn languages, assigned to ancient civilizations.
Ziggurats, containing fully three-dimensional dungeons (multiple staircases which retain coordinates between floors). – Procedural generation of riddle puzzles in ziggurats. – Extensive graphical update for many items, accessible through the ‘l’ook function – stairs, doors, walls, stone blocks.
- Several secret items and hints towards future features and story.
- Over 100 tweaks, bug-fixes, and general improvements.

 

The focus of this release is the ziggurats. Version 0.3 is partly a “proof of concept” for procedural puzzle generation, partly experimentation with dungeon-generation algorithms more interesting than most roguelikes produce, and also a number of under-the-hood factors that work towards moving the game closer to what I want it to be. Naturally in later versions ziggurats will contain more than merely puzzles (and secrets), but they are the focus for this release. Remember to use ‘l’ (lower case L) to look at clues, and ‘g’ to grab blocks. Head to the link below to acquire the latest version, and do let me know what you think.

Click here to go to the download page.

Lastly, I’d like to make a request. If you like the game (or like my future plans for the game!), please consider donating. To do so either click the button on the right, or click HERE then click the button on the right. This is the first time I’ve explicitly asked for donations outside a passing comment, and the reason is as follows. I’m doing a doctorate at the moment, and going into my final year. However, I am self-funding, which has required me to search high and low for sources of funding. It’s been fine these first two years, but my rent has almost doubled this year, and combined with paying the registration on the course, I’m in a spot of financial trouble. I have no intention at this point to Kickstart the game (unless a lot of replies on this post encourage me to and would be willing to contribute), but any donations would go a long way to my living costs this year, to reducing the amount of paid work I have to take on to keep myself going through the PhD, and therefore boosting the amount of coding I can do. I’d like to have three more versions released in the next twelve months. The details of them are as follows:

0.4:

- Limbs – damage, healing, movement penalties/bonuses, etc.
- Expanded basic inventory system.
- Traps – trap rooms, lethal/non-lethal, gas/acid/spikes/poison/fire and more.
- Jumping/dodging/falling mechanics.

 

0.5:

- History Generation – war, rulers, families, artworks, discoveries, etc.
- Myth & Legend generation – deities, beliefs, heroes, monsters, etc.
- City Exteriors – cities show up on map, city walls can be accessed.
- Religion/Civilization generation – policies, governments, etc.

 

0.6:

- Improved World Gen – new biomes, swamp/plateau, natural wonders, redo polar, etc.
- Pyramids – map generation, light puzzles, second “dungeon” type.
- Special dungeon floors – hall, labyrinth, crypt, etc.
- OTHER COOL STUFF.

 

Whilst I know in the past I’ve stressed “donating will not speed up development”, at this particular point in time, and at least for the next year, it will. The game will be free forever, but if you like what I’m working on, please give it a thought. Your name also gets added to the “Acknowledgements” list in game! Thanks, and I hope you enjoy version 0.3. Please leave as much feedback as physically possible, here or anywhere else that URR has a presence, about what works, what doesn’t work, what you’d like to see in future versions, etc.

Contiguous World Maps

Currently, all grids are contiguous on the human level. Which is to say the map continues scrolling as you walk to one side or another, and when you get close enough to a new map grid that grid is loaded. The @ stays centered in the screen at all times unless you reach the absolute edge of the map, in which case I believe it currently crashes, so please don’t test that and just take my word for it. Good. As of version 0.3 (due to be released in August!), this is changing. You will no longer be able to move contiguously between grids on on the human level, which is to say that when you choose a grid to load from the Travel screen, that grid and that grid only loads. When you reach the edge of a grid, it will cease to scroll and you will bump up against the edge of the map. If you try to move over it asks you if you want to go over, and if you say yes, it loads the next grid along, moves you to it and unspawns the one you’re on. You will therefore still be able to move across the entire world on foot rather than travelling, but it will be through distinct map grids. This is a significant change, but one with three causes. I hope to explain my reasoning as clearly as possible here, as I think this is a big positive move for the game.

1) Loading and memory. Loading times suck. People kept saying this about 0.2, and they were correct. Now that there are things to do in map grids loading zones are far rarer, but they’re still a pain and everyone hates them. This would hugely reduce the regularity and size of load times. Secondly, it would mean the same would take up a lot less RAM when running, as no more than a single map grid would be loaded. These aren’t the main factors (reason #3 is the major one), but I think they’re important nonetheless.

2) Contained player experiences. At the moment, if you encounter something that requires fighting (when there are things to fight), you’ll be able to keep fleeing and running across maps. And that’s ok… if you’re making a truly open-world game, and whilst URR is within an open world, it’s no longer so much an open-world game. I think there’s a definition issue here that could merit another blog entry where I ramble about what exactly these terms all mean, but back to the point – if you cannot leave the map grid that easily, then you are forced to deal with challenges within the map grid rather than simply fleeing from it. There is a place for fleeing, and I’ll  have to think about implementations, but I don’t want fleeing to be the automatic response. I also think there’s something to be said for making each area feel like a distinct area – you enter that area and explore that area. Open-world games have a very particular kind of exploration, but that’s not quite the kind I’m now after.

3) Doubling (!) the space of play. Weirdly, this change would actually give you over 50% more play on each grid without loading zones. ALLOW ME TO EXPLAIN. Currently each grid (by which I mean one icon on the Travel map) is 200×200 tiles. When you enter that grid, you enter at a point appropriate for the direction from which you can in from. If you enter from the north, you appear at 100/50 – so in the middle of the northern edge (i.e. 100 squares in from the left, 50 squares in from the top). The south-east spawns you at 150/150, and so on. The trigger for loading neighbouring grids is the player being < 30 or > 170 on either axis, as the picture below shows:

Exp1

In this image a ziggurat has spawned within the non-loading boundaries. If the player attempts to enter, for example, the pale green area on the right, it will load the grid on the right. Entering any of the light green corners would result in three full grids being loaded (which takes maybe 30 seconds). Believe it or not, this system actually means that less than 50% of a map grid can be explored without straying into a load zone! The grid is 40,000 squares, and a quick calculation shows that only 19600 of those squares are outside a loadzone. Whilst not perfectly accurate, the picture below demonstrates this to some extent. All four of the bars fit in, but if you were to fit in the corners, it would exceed the space in the central area:

Exp2

When grids do not load and sew themselves together, all 40,000 tiles in a grid can be used for gameplay. Until now I haven’t wanted to spawn any buildings within the loading zones because it would be even more annoying if things starting loading whilst you were exploring! This way you will never get any loading zones once you first enter a map grid – which will itself be quick – and buildings can be placed in all kinds of areas, allowing for rather more interesting map grids:

Exp3

…such as those which have multiple buildings that could brush up against the corners and the edges, and thereby doubling the amount of play per map grid by removing areas where I “cannot spawn buildings”. It also allows for a rather more interesting piece of gameplay for the player, from an experiential perspective – if you enter from the north, you now spawn at  the coordinates 100/0 – i.e. right at the top of the middle – and therefore can explore the entire grid and see what it contains, rather than the small size of the non-loading-zone forcing me to spawn the player basically right next to the ziggurat. From the playtesting I’ve done it’s lot more interesting to play when you don’t immediately see the grid’s contents. This will be taking effect this release, though I don’t yet know if multiple ziggurats will appear per grid or not, as that requires a rework of some code I implemented whilst assuming nothing like this would be the case. Either way, I think this is definitely the right move forward, but as ever let me know your thoughts in the comments. Next week: the final update before release?!

Plots, Permadeath, and World Gen

Firstly, many thanks to everyone who responded to my consultation thoughts about permadeath.  Between here, the Twitter, Facebook and a bunch of forums I had about fifty responses about the three-lives idea. Most people were against it, whilst a small number lamented the fact the game is gradually becoming less open world (more on this in a moment) and a few said the three-lives thing could work with some kind of story reasoning behind it. Quite a few also thought that a minute or two of rolling a new world – given that early-game death will be rare in URR, and that length of time is certainly nothing on DF – wasn’t too bad. I’ve tried to put as many of these comments as well as my own thoughts together, and I think I’ve found a good solution.

So, firstly, something about “open-world”. As I’ve been thinking about this, I’ve come to realize that there are perhaps two different things encapsulated in that term. On the one hand you have a world with a great degree of freedom – one you can move around in any direction you like (though with perhaps limits on certain buildings/dungeons early on) – and on the other hand you have a game that is “open world” in the sense of Dwarf Fortress. DF is open world in that first sense, but also in another sense – there’s no plot, no story, no objectives, etc. Maybe there are two distinct terms and I simply don’t know what they are, but I think it’s worth distinguishing between games where the world is open, and where the gameplay is… “undirected”? This puts me in mind of Mafia II – that had a wonderfully realized Goodfellas-esque “open world”, but because there was nothing to do except the main story missions, the gameplay was very linear (and the world was, I think, somewhat wasted).

Anyway, URR is most certainly staying an open world in the first sense of a planet with few restrictions on movement and exploration, and partly so in the second sense. I am keen to involve a story, but I do not want to fall into the Mafia II trap of having an impressive world with little do outside linear story missions. There’s a bunch of ways I’m navigating this – firstly, by simply making the plot a lot “wider” and requiring quite a lot of the world to be explored to complete. Secondly, obviously, the procedurally generated aspects mean more exploration of the world is required and there’s no way to know up front (except in quite broad parameters) what parts of the world will be involved. Thirdly, it’s not at all a linear story/plot, and will be playable in a large number of different orders and sequences (think Dark Souls if you have the Master Key). Fourthly, I plan for each area/challenge to be conquerable in a number of different ways depending on your character’s skill set, and the player’s preferences. There will also be a lot of optional activity which might make later activities easier – for example, if you need to move through a war zone, you don’t have to try and intercept some intelligence beforehand, but it’s probably going to help.

I am firmly fixed on the story idea. I have some ideas for that (I think!) are interesting, original, and can provide a lot of challenging gameplay. I therefore put out a consultation about lives and reloading. As above, most people didn’t like the three-lives idea, and I agree with most of the criticisms leveled at it. Thus, the model we’re going for is that of one life, permadeath, and you need to roll a new world upon death.

I was concerned about this system for one major reason – that it takes a minute or two to roll a new world. From talking to friends who don’t play RLs I have increasingly realized that my concern over three-second load times in-game and the like are maybe a little misplaced; however, a few minutes is still a chunk of time. However, I think this will be an acceptable solution for two reasons. Firstly, world generation does show you its progress, and once history generation is fully implemented, I intend to include counters and rapid updates showing you its progress. Based on my early experimentation of this, it looks pretty neat. But the second (and rather less trivial) reason is simply that although there is permadeath, and I intend to ensure there’s a lot out there that can kill you, there probably won’t be that many particularly early in the game. Unlike a lot of RLs which struggle from the problem of that early game being the hardest segment, I’ve been planning seriously to make sure this isn’t the case. A new player is unlikely to encounter rapid death both because they won’t necessarily be aware of where to travel and what to do, but also because the early game will be relatively (relatively) friendly. Having to reroll a world will be reasonably rare as a new player.

So that’s the model. I don’t think rolling a new world upon death will be too annoying as it should be relatively rare when you’re a new player, and as a more experienced player you should get much longer games before you do expire (if you do, that is). Also, due to the procedural generation, dying once after uncovering a small part of the plot will likely mean the next character in a new world might come across a different aspect of the story first. It will be interesting to see how players try to put components together, especially if they’re new to the game and only seeing small fragments of the plot with each character as they learn the game. I’m very much looking forward to this shift for the game – I think it’s a good way to meld the open-world I want to make, but also the narrative I want to write and maybe more importantly that sense of real progression you get from playing something like Crawl.

Lastly, a more general note. I’ve been very ill the last few weeks, and whilst I thought it had largely cleared up, it has un-cleared in the last week (hence why this update was so badly delayed). Once I feel better I think I’ll be able to get back on track, but I don’t know when that will be. Still aiming for an August release, but it’s probably going to be towards the end of August. Thanks everyone for keeping with me during this unusually long release – I do still aim for six month releases a maximum, and after this one and normality is restored in my non-URR existence, hopefully I’ll be able to stick to that.

Permadeath and World Generation

First, 0.3 update, second, general URR discussion. This week I’ve been focusing on finishing off everything except bugs and small features, and that’s going well. All the secrets and the basic inventory are fully implemented, ziggurats work perfectly, and I’ve done a lot of work on generating some rather nice door graphics. For example:

What lurks

(I am aware there should be vines trailing inwards – working on it). This coming fortnight I’m rushing around the country like a mad person gathering data for my PhD thesis and giving a talk about roguelikes at an academic conference (which I will try and either record of convert to some form viewable here), but by the end of this fortnight I’d like all graphics finished off, one slight movement issue with blocks, walls and the player character fixed, then I can move onto bug fixing. The requirements for the next release are really coalescing in my mind now as well, so I’ll probably post about those in the near future. Whilst this is all going on, the body of today’s entry is about longer-term plans, specifically about permadeath.

Permadeath provides many of the things I love in roguelikes and roguelike-likes (I’ll just call them all “RLs” for this discussion, so that’s everything from Nethack to FTL). A high level of challenge; a huge amount of tension at risky moments that few non-permadeath games can emulate; and a genuine feeling of progress and accomplishment when you reach new areas you’ve never reached before (particularly when they actually look aesthetically different – I am looking at you disapprovingly, Nethack, and you approvingly, Crawl). An additional factor I think shouldn’t be overlooked is game balance. Which is to say, game balance in something like Dungeon Crawl is very carefully designed around permadeath. If you remove permadeath from Crawl the game becomes almost trivial. If you could reload and thereby reroll every floor, you’d never have to deal with any nasty unique; you could reload before consuming mutagenic corpses to farm every positive mutation in the game; you could reload floors with treasure rooms or shops until they sell what you want; and so on and so on. Game balance in any good roguelike is not just broken but utterly destroyed if you don’t have a single life you can’t reload, because it hinges on the game distributing good items, bad items, easy foes and nasty foes towards you according to whatever algorithms govern them, not according to someone endlessly rerolling until they get a great outcome.

However. I got to thinking about permadeath in URR, and realized an issue. Generating a world currently takes around a minute – once history generation is implemented, probably in the next version, it’ll take maybe 2-3 minutes to generate a world. That isn’t much by DF standards, and there will be a lot of gameplay in that world, but it’s still a decent block of time. I originally thought the solution to this was to simply let you have new characters in the same world, as many as you want, but that won’t work. A lot more will be said on this later, but here’s the big reveal: URR is developing a plot (lots more on this in the future, but it’s going to be very interesting, and nothing like normal medieval-story fare). A weird and obtuse one, but still a plot (which the secret items in 0.3 are a part of). Having infinite characters in one world means you, like save-scumming in Crawl, cannot fail to complete the game, if only by just trying character after character until one them gets through each challenge.

That does not appeal.

However, nor does having to generate a brand new world every time you die. Admittedly combat and death are going to be comparatively rare in URR compared to most RLs, but combat is going to be brutal and bloody, so you will lose characters, or to traps or starvation on long excursions if not to direct combat. I don’t want to discourge new players by forcing them to sit through a new world-gen every time they die rather than being able to jump back into the action, but I don’t want the game to be made too easy by having infinite characters all contributing to succeeding in a single “campaign”. I’ve been trying to think of a solution, and I think I’ve developed one which is original, sensible, and could produce some interesting emergent risk/reward strategies.

The current idea is this. You have three “lives” in each world – when you die you can create another character twice. When your third character dies, that world is finished. Each life starts with 25% of the XP of the previous character which you can assign into any skill tree from the start, but none of the items – they are left upon the original corpse, vaguely likes a Bones file in another RL. This means when you die the first time, you don’t have to reroll a world, and can learn from your mistakes whilst keeping whatever progress you made. Also, and possibly more importantly, it could lead to interesting tactics. Once you know the game you could make one character to do one particular area, then kill them off and start a new one for the rest of the game – you might have got a specialist to solve one region, but you’ve used up a full character, and you don’t have many to spare, so that’s a risk/reward decision. Equally, losing a character not by choice could let you reassess what killed you and either create a new build to deal with the same, or explore another region with another build.

So that’s the current plan. There is no way to die in 0.3, so this isn’t implemented yet, but this is my plan. I’m firmly set on the “plot” idea as I have a lot of ideas for it (go read some Jorge Borges for some clues), and that necessitates true permadeath, but without the annoyance of endless re-rolling. I think it’s a good compromise, but I want to know what everyone else thinks. Let me know your thoughts! I should stress I have in no way settled on the three lives idea – maybe I will stick to normal one-life permadeath – but I’d like some feedback on the concept.

June Progress II

The last week  has seen more coding than much of the last month – having lacked the internet for the past week, very little else has been done aside from it. As ever, the release is a mix of things I’m making public before-hand and a few secrets I want people to find, but here the updates I can share. I’m aiming for release probably around late July at the moment, but it might get pushed into early August. The first half of July is almost entirely full with academic work, so we’ll just have to see how it goes. I’ll be doing a lot of playtesting towards the end of June once I have a pretty stable build, but ziggurats are looking all but finished.

Puzzles are 100% finished. There are five “levels”, finishing off with “boss” level puzzles. Even when I know how to solve the puzzles, they still take me some thought. Playtesting it with people who don’t know how they are generated under the hood have found them so far genuinely challenging and really interesting to solve, so I have high hopes. They include a vast quantity of procedural art (something like 200+ images?) and over 300 possible puzzle permutations, and that’s not even counting the clues. You’ll have to play A Lot if you want to see even a small percentage of these things.

Ziggurats are 99% finished. They generate the entire buildings, all puzzles generate (as above), the structures inside and outside match up, dungeons are three-dimensional, which is to say staircases lead directly up and down, not to random points on the floor above, and some areas can only be accessed from floors above or below. It makes for a really interesting structure to explore, and it’ll be all the better in the future once a greater variety of rooms exist. Special ziggurats also have secrets atop them, whilst by the end of tomorrow other ziggurats will have clues pointing you towards the special ziggurats if you’ve taken the wrong one. In the future these will be treasure rooms etc. Lastly, as well as “Look-up” graphics for blocks, I’m adding ones for doors, iron gates, and a few other things. They look pretty cool.

A basic inventory system is now in place. This is not what it will look like in the future, but suffices for the time being to deal with the few items now in the game. It won’t be redone for the release after this (probably), but certainly will once a decent number of items actually enter the game.

Next update will be next Monday, and since I now have internet at my new place, they should be regular until release (I know I keep saying this, and failing to keep to it, but I’ll try). By this time next week, ziggurats should be totally finished and I should be onto bug fixing and optimizations. I’ve had a very crazy idea for hugely reducing save/load times I need to try out, amongst other things.

As a final note, I’ve taken to streaming games on Twitch. At the moment I’m doing a Dungeon Crawl Stone Soup extended endgame run, but I might stream coding and playtesting or similar in the future if people are interested, and it could be a cool way to just chat with you guys! Let me know what you think, and see you next week (or on a stream). My account is http://www.twitch.tv/maasbiolabs, and I’ll probably be streaming some DCSS half an hour after this blog entry goes up…