Heh, awesome. Like I said, still watching and waiting with eagerness. The effort and skill you've put into everything so far should give this the kind of atmosphere that's missing from most roguelikes. Every picture you show us is rendered beautifully in ASCII/ANSI/custom graphics.
Thanks! Atmosphere is something I think is really important, and I'm really happy with how these early dungeons are shaping up in that regard. I've just uploaded a huge gameplay update on the blog -
http://www.ultimaratioregum.co.uk/game/2013/07/29/contiguous-world-maps/ - but here's a copy of the update:
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:
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:
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:
…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?!