Firstly, most of you will be aware that around a month ago I spoke at this year’s Roguelike Celebration, essentially about the previous blog update, and now here’s the video :). Enjoy!
Next, 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 throw items
- 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
- 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: 185 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, which are many, and very diverse, and really quite cool:
As many readers will know, there are essentially five core things one can do with any item at present:
The first is destroy it, which means (except in a handful of cases) the player character destroys the item, and discoveries whether there is anything inside (e.g. a hidden note, a hidden item, and so forth). The second is dropping it on the ground. The first is showing it to people around you, which elicits responses and comments on the item relevant to the nature of the item, the people you’re showing it to, and so forth – and might also elicit secrets responses for showing particular items to particular people. The fourth is to use it, which doesn’t apply for all items (e.g. trade goods) but would mean something like wielding a weapon, putting on a piece of clothing, drinking from a canteen, reading a book, and so forth. All of these are either totally implemented or almost completely implemented, but the missing one has been throwing an item. This was needed partly for throwing weapons – currently only grenades, but with more intended – but also to add more “verbs” to the game, i.e. more interactions and more possibilities for things to be included in riddles, too (e.g. “The priests of the Goddess of Rage honours those who destroy precious things in her presence”), and more generally just a larger interaction set (maybe you can sometimes get the attention of an enemy in a useful way by throwing something that’s not a weapon at them, before then entering combat?).
Either way, it was time to add throwing. There was a very basic version of this in a vastly earlier version of the game, but now I’ve totally reworked the thing and I’m incredibly happy with how it’s looking. For starters you can throw any weapon, you get a crosshair and a trail that shows you where it’ll land – going red if you pass the trail through something which will interrupt the throw, like a wall or the trunk or a tree, or a person, or whatever it might be:
(Yes, I know there’s a tiny flicker before it lands – don’t worry, I’ll fix it!)
Most objects don’t smash when thrown, but a small number of objects do smash when thrown, and this effect is something I’m incredibly happy with. The game selects a random smash animation – all similar, but slightly different – which takes place over three “frames”, and then does two quite neat things. Firstly, it selects a set of ASCII / ANSI characters to represent the smashing of the item, and these characters vary for every smashable item. Secondly, it selects the appropriate colours for the smash, and these also vary according to item, and even within the item type, too. Here for starters are a few examples from throwing some pottery on the ground. Firstly, earthenware:
And finally porcelain:
And what is noteworthy about the porcelain one is that the exact colours of the item in question…
…are reflected in the smash (i.e. white and yellow)! This is the case for every item whose colours can change – the shattering animation will always use the right colours for that specific version of that item type. For some items this is pretty simple while for others it takes a lot more effort, but the effect is really neat. Here are a bunch of other smashing animations for various items such as watches (animation reflects the main metal it is made from), jars of spice (smashing animation reflects the spice inside), and bottles of alcohol (smashing animation reflects both the colour of the glass and the colour of the booze within):
And here are some different grenades (fragmentation, smoke, flash), too:
There are also, however, smashing animations for the thing you’re hitting, rather than the thing you’re throwing. Some in-game objects can be smashed by throwing something heavy enough at them (the item weight does matter here) and then you get a special, different animation there. Examples are vases, and metal candle stands, as shown here when I hurl something heavy at them:
There are also, however, a range of quite well hidden item-throwing interactions! For example, throwing a bag of gunpowder into an open fire, or lava, will yield the same outcome as throwing a fragmentation grenade (i.e. it explodes):
While chucking alcohol onto a fire gets a fiery response:
And many other interactions of this sort can be found elsewhere, too. There are also certain items that will normally be undamaged upon landing but will be damaged or destroyed if they land in fire, or water, while others will not. In every case I’ve tried to just implement the most logical set of interactions so that the player shouldn’t need to look anything up, but should realise – if I throw a gauntlet into shallow water it’s just going to land in the water, but if I throw a piece of paper into shallow water, it’s going to disintegrate. Objects can also of course hit people, and for now (regardless of what the object is) it doesn’t hurt them or damage them (that’ll be implemented in probably the next release, when I increasingly think combat is going to be our focus) and just falls to the ground, though it will annoy them (i.e. they’ll refuse to talk to you). This is one of those things where implementing some kind of response – injury, a declaration of combat, etc – then requires me to implement all the other parts of that stuff, and now is not the time for that. Anyway, here I am hitting someone with an item, which causes them to refuse to speak with me:
Overall I’m really happy with all this looks, how it all functions, and how it lays the foundations for things like grenades, bows / crossbows, firearms, and the like, and who knows what else in the future!
(I also know that rarely the thrown item does like to vanish for a heartbeat during the explosion animation – don’t worry, I’ll get that fixed, I just needed to get this blog post up this weekend!)
We now have some really nice visual effects within the player’s field of vision (and in some cases outside) for drunkenness, rain, fog, snow, sunstroke and hypothermia, and also hallucinations (even if the last one of these cannot actually be currently induced, but given that I was making all these effects it made sense to make them all at the same time, in anticipation of them all being implemented in the reasonably near future). Here they are:
Rain and Snow
These are the simplest effects, so let’s take a look at these first. Both rain and snow will scale with the intensity of the rain or snow in the player’s current area, and produce appropriate characters and colours that will appear on the map as you walk around. For rain the direction of the / is dependent on the direction of the wind, while snow uses the ‘*’ character regardless of the wind’s direction. Here’s an example of a middling level of rain…
…and here we have a light snow…
…and a very heavy snowstorm:
I don’t know to what extent the gifs get this across, but walking around with these effects genuinely does evoke the sorts of different weather I’m trying to convey with these! It’s a really nice difference when exploring an outdoor region compared to when there’s just no weather effect at all, and you might notice that NPCs are never obscured by snow or rain – although any other character can be, though just iterating one more turn will cause a new selection of random tiles to be rained or snow on instead. Overall I really dig how these both look, and they were also astonishingly easy to implement – I had anticipated a lot of this to be quite a significant amount more challenging than it eventually turned out to be).
(There is also an incredibly rare and almost secret weather type, sleet, which only appears when both snow and rain register as being present, but it’s so hard to generate I literally couldn’t get a gif of it – but it is out there! Very, very, very rarely.)
We also now have a nice effect for fog! Essentially it blends both the foreground and background characters of a tile with a grey shading with greater intensity the further away from the player it is. This took quite a bit of playing with to reach something I really like – one of the early drafts had all the black in the unseen areas replaced with grey as well, but that was hard on the eyes! – but I really like how it looks now. Here’s an example with a very mild degree of fog, where you can just about make out a little bit of grey towards the periphery of the player’s vision…
…and here’s a more intense version with a thicker fog, and incidentally, a bit of rain:
Nothing else to really say here, but I like how it looks! Fog is a pretty rare effect, but will pop up from time to time. Also, maybe it’ll slightly affect things like your throwing accuracy, or accuracy with ranged weapons, these sorts of things…? More generally I like the idea of weather conditions affecting combat and other interactions, but the exact specifics will definitely need some more thought.
(And just looking at the gifs, grrr, I’ve just noticed a bug, which is the player character disappearing when going under a tree during the fog. Don’t worry team – I’ve noticed it, and I’ll fix it!)
Next – drunkenness! I really like this one a lot. When you become drunk, the game duplicates some tiles in your vision area and places them at random locations close to their real locations, to simulate one’s vision being blurred, one’s sense of balance being slightly amiss, and so forth. Here’s an example of someone who is extremely drunk. The number of tiles being switched around declines with time, and also the distance they’re being switched around declines as well, until eventually all returns to normal (not in this gif, though!). First we drink…
…and then we pay the price:
I really like how this drunkenness effect looks! Very distinctive and easy to recognise, and very different from the other effects in the game (or other classic-style roguelikes, for that matter).
Sunstroke / Hypothermia
In the real world both sunstroke and hypothermia can be associated with changes to vision, so I decided to go with this in order to generate a distinctive two effects here. If your character has either one of these two conditions and you’re moving around the world on foot, things will look a little bit strange. With sunstroke, you start to get large portions of the map in front of you which have a deep background colour rather than the usual black, which I was trying to use to signify that one has been overwhelmed by heat (or sun) and everything’s a bit blurry and hazy…
…and with hypothermia, the game instead darkens a lot of the characters around you, and again, I’m really happy with this effect, and I think they’re both nicely unsettling, easy to notice but not overwhelming, and a nice difference from the other visual effects in this list:
As a side note, I’ve also changed hypothermia and the milder frostbite to be things that only happen in polar regions, not in mountains. I think the clarity of poles and deserts being the dangerous regions, and the only dangerous regions, adds some good clarity to the whole thing and will certainly prevent some frustrating deaths for new players, I think, wandering across mountains without being clear on the risk those pose – or, rather, posed. Also, much like drunkenness, hallucination (which I’ll reveal in a later entry), and other states, I’ll be adding both sunstroke and hypothermia to the generation pool for what some (rare, mad) religions might consider to be a mental state conducive to divine revelation…
You can now find wanted posters in relevant nations (with the “vigilantism” justice policy). These are so unbelievably cool and I’m so glad I now get to show them off. They naturally use a lot of the same code as the face but apply a different colour depending on the colour of the paper they’re being printed on – a random selection of grey / red / orange / yellow / white colours – to everything on the person’s face from their skin to their tattoos to their earrings and everything else besides. Here are a couple of examples:
There’s a whole bunch of information here worth mentioning. The first thing is that it will always have a name – though I think sometimes maybe just a nickname instead, if the person is from another nation and their real name isn’t known – and also a single line of hint about where / how they might be found. This might be somewhere they’ve been seen, or the religion they follow, or the nation they belong to, or an area they often hang out, etc. I can see this as a very easy way to really vary some of the lead-in hints to finding the specific person in question. Then, in turn, each person can have a range of possible rewards for various actions, up to 4 in total (so 2 on each side of the poster). These might be retrieving an item from this person – which could be done peacefully, or through violence – or reporting their location, or bringing proof of their demise, or whatever else. Again, the key to all these sorts of things in roguelike is variation, and I’m trying now to keep thinking about other possible things one could do with a “wanted” figure beyond those three. Equally, I think in all cases warning someone who is wanted, or letting them know that the state is aware of their location, will have other possible rewards as well as bringing them in – so perhaps one warns them about their wanted status, and something else can come of it?
As for where these spawn, this is one of those cases where one has to think about how the player will actually address themselves to the mechanic. You don’t want something that’s going to encourage the player to do anything at all grindy / farmy, and this really ran counter to my original thinking. My first intent had been to basically scatter wanted posters pretty randomly within the towns or city belonging to the nation in question, but the issue here was that a player could just spend a lot of time looking at every poster without doing much else, seeking posters out, and potentially not knowing once they’ve seen x posters where there are only x posters currently active, or whether another poster could be found upon further searching. This doesn’t make for interesting gameplay, so instead I’ve decided to resolve this with two issues – wanted posters always spawn in groups, and they always spawn in their maximum number. What I mean by this, therefore, is that if a vigilante nation currently has 4 wanted criminals on the loose (I think 4’s a good number – not too big, not too small) then the group of all 4 wanted posters will consistently appear in certain locations. Specifically, in cities this means they spawn inside banks and inside taverns, while in towns they spawn inside taverns. For example:
This having them all in one place like this is really important and vital for the usability of the mechanic. And of course, later on, once someone who is wanted has had their wanted status, er, resolved (by whatever means), I would assume the existing poster would be removed and a new poster would be added in its place. Lastly and as part of this I’ve also reactivated, although not currently accessible, several key encyclopedia categories, and you’ll notice these include bounties, which will have a reproduced record of bounties which will (soon) get added to each time you see a new bounty, and will show whether they have been completed (by you or someone else!), or not:
Canteens now have another function, which is “empty” – so long as there’s something in there. This is therefore different from the “drink” option, as sometimes there might well be stuff inside that one doesn’t fancy drinking. Once the canteen is empty, a new option then presents itself, which is “fill” instead of “drink” as the default use option. If there’s a liquid either on your tile, or on a tile right next to you (e.g. you’re standing next to a river), the game will give you a list of things you might want to fill it with, and then you choose one and get it filled (the menu comes up in case you’re in the future standing on a map tile coated with blood, but you’re next to the water, and it wouldn’t be obvious which of the two the player actually wants). Here’s the filling menu, with a placeholder example where you might be next to multiple substances that you could fill it up from:
And you can also now press ‘Tab’ while using a canteen to have a look at what’s inside!
This will also enable the existence, later, of some substances / combinations / etc which might have unusual looks, and then we can describe the looks… and also I didn’t want the little drop graphic I developed to only show up when you’re buying water! There are also of course colour and pattern equivalents for, ah, other substances…
I have also found another use for the face generator!
What happens when someone is executed by a vigilante nation, or otherwise “brought to justice”?
These heads-on-spikes now appear in vigilante nations (the ones with bounties and the wanted posters above), but don’t appear in nations that stick their criminals in jail, push them through ordeals, have “frontier” justice, or chuck their criminals into arenas. As just a general reminder, vigilante nations = bounties and heads-on-spikes, penitentiary nations = jails in cities, frontier nations = early gunpowder weapons, ordeal nations = torture / injury as punishment (not yet implemented but probably a 0.12 thing if 0.12 is indeed combat), and gladiatorial nations = battles in arenas (ditto re: ordeal nations). I think these look really tremendous, especially the more rotten ones – there are five levels of rot from the first to the last as shown there, so maybe it takes a season for each transition? That seems like a reasonable pace. I might add even nastier transitions later, but for now these work very nicely indeed.
(And I can immediately see puzzle types here with the descriptions of people who might have been executed, and of course, just using the heads as another thing for many riddles to riff off, e.g. “Her ring was buried where her head is held aloft…”).
Removing storage, removing weight, updating inventory
I’ve made quite a few key changes to some of the game mechanics in these last few weeks. As players will know, at the moment items have a weight value and a size value. The player can also have items shipped to other nations where they can be collected, and the player’s inventory has a weight limit which was intended to have some overburdened effects if the weight of the player’s total items got too high. The idea behind this set of things was that the player could carry with them only a core set of items they needed, and there would be a strategic element to sending on other purchased elements ahead, planning out travel, deciding where you wanted to ship items to in order to sell them in those nations for a profit, and things of this sort. These were quite novel ideas and I liked them at the time, but I’ve been running into problems with them recently when I run through those sorts of “how will players actually engage with this?” and “what will the optimal strategies be?” questions in my head. My concern is that the more I think about it, the more I think this system will be solely frustrating rather than strategic, and will frustrate people who don’t have the items they want on-hand, will take a lot of micromanagement which lots of people don’t enjoy, and also runs into some logical issues too. Books, for instance, should have a weight, which means you’d be limited in how many you carry, which means you wouldn’t always have access to books containing important information, which means I’m then incentivizing the player to just take screenshots of the content of important books before dumping the books out from the player character’s inventory…
…and none of that is good. So I’ve made a few changes which even if they slightly reduce things on the realism front, will significantly improve things on the gameplay / quality of life front. Firstly, there is now no “storage” system in nations – the menu you get when entering or leaving a gate in a city now looks like this…
…and when you purchase items, they just automatically go into your inventory:
Items in your inventory do still show their weight – because that is of consequence for things like throwing, and might also be of importance for other things I have planned as well – but you will notice the inventory now has no weight limit at the bottom of it:
In turn, the inventory has been updated. I have removed the “tablets” option as that wasn’t really leading anywhere, and the things I had in mind for that are much more interestingly reflected in a number of other ways. Instead we have two new categories: instruments, and ingredients. In the first case, this does indeed mean that procedurally generated instruments will be on their way, and will be another potential “key” or potential “lock” for steps in riddles! I really love this idea and I’m excited to implement it, and it will also mean that the “Bard” NPC class – who show up in the guidebook, but can’t yet be found in-game – will not be too far behind. Then we might want to generate songs and poetry for nations and religions… but let’s not get ahead of ourselves. The other category, “ingredients”, will be for things like plants and mushrooms and the like. I have some really cool and interesting ideas I want to explore with these, essentially involving a large number of procedurally-created recipes with a lot of interesting use and trade effects later on, but again, just for now: we have the category.
Ultimately – rather like the posters issue I described above with scattering posters randomly rather than in set and logical locations – it was clear that the current system of weights, storage, etc, wasn’t going to ever lead to interesting gameplay, but rather a bit of frustration, a bit of confusion, and just extra inputs which aren’t really necessary in order to achieve a given objective. Instead by removing the weight limit on the player’s inventory and removing the storage system we have lost a little bit of realism, I’ll grant you, but gained a lot of smooth and easier gameplay, which is certainly the more important thing.
The bookmarking window has been significantly streamlined, having now been updated to a single word, and with a much wider selection of relevant words. This makes it a lot faster to find what you want, potentially more descriptive, and also hints at a few of the things we should expect to see finding their way into the game in the future:
New & updated features & graphics
Next, loads of new things to be found (which can always be added to riddles, clues, puzzles, and so forth) have entered the game world along with some lovely generated graphics, and one existing graphic has been significantly improved to bring it in line with the quality of the generated graphics I’m now used to the game having. Specifically, we now have procedurally generated benches, crates, and cacti (each with of course many tens of thousands of permutations), and updated graphics for palm trees, too:
Overall I’m really happy with how these look, and again add to the detail of the game world and the potential features that can be used to describe locations, and even might contain secrets themselves – perhaps later on we add the ability for leaves to be torn or ripped, and one needs to specifically find a damaged palm tree as part of solving a riddle sequence? Or we need to find a crate with some graffiti daubed on the side? Or to look out for someone who always rests on a certain bench at a certain time? And so on and so on – you get the idea. Anyway, these are all now implemented in the game world and it’s good to see them in the game, and again just increasingly the density of what’s here, what can be seen and interacted with, what might be relevant to the player’s adventures, and so on.
Final god statues
I’ve also added a few final variations to the generation of god statues. The first set involved gods with shapes for heads – it took a surprising bit of time to find a set of shapes that actually looked good (hollow squares or hollow diamonds, for instance, looked strangely bad, for reasons I can’t quite pin down) but I’ve created a set that I’m really happy with. Here are some examples of the gods with this, er, unfortunate medical complaint, that one might encounter in statue form:
And we also now have a range of more humanoid and “normal” heads. All these heads are still recognizably human – at least compared to some of the others out there! – but most have a few strange aspects or quirks such as horns, extra eyes, fewer eyes, things of this sort. Others however are just totally human, though those are pretty rare. Here’s a few examples:
And with this, I think god statues are finally done. The last part was to return to god generation and make sure it actually, you know, matched the possible statues the game could generate. This took a little bit of time as this was some of the oldest (i.e. worst) code in the whole game and distributed across all manner of different locations (sigh), but after a bit of wrangling I was able to make sure that each god was correctly selecting a range of appearance options that could actually, and properly, be reflected in what we saw in the god statues themselves. For example, here’s a statue and a description for the same religion…
…and we will note a perfect match! I still need to do actually a tiny bit of remaining polish on the Lovecraftian gods, but all the non-Lovecraftian gods within a given world (i.e. most of them) are now good to go.
Some personal news – I have been promoted to Senior Lecturer (which here in Australia is the equivalent of, in North America, either a very senior “Assistant Professor” or a junior-ish “Associate Professor”) and have been awarded tenure! This is a pretty big deal – I’d been here 3.5 years before I applied for both, then had to wait a full six months after submitting a 10,000 word document explaining why I should be awarded the position and the upgrade. It was pretty scary in the final week leading up to the deadline for hearing back, but it came through – and not just that, but I was told my application was far beyond the minimum requirements for the promotion and confirmation, so I’m now beginning to plan for the next promotion to the Australian “Associate Professor”, which is something like the upper end of the NA “Associate Professor” / the lower end of the NA “Professor” (NA universities have 3 ranks, Australian universities have 4, so it’s sometimes a bit tricky to perfectly describe the comparisons). Anyway, the point is: job security, pay jump, and all the other good stuff that comes with a promotion. I’m feeling really pleased about this, and in the same week as the Roguelike Celebration talk going so well – I have to be honest, I’m feeling (touch wood!) like I’m in a really good place at the moment. Work’s going great, game dev’s going great, and – touch wood again – health is going great as well. Long may it last!
Also, as ever – if anyone wants to do a PhD with me studying roguelikes or similar, do give me a shout :).
Bugs, polishes, etc
- Fixed a major freeze bug in upper-class housing districts involving NPCs being unable to find somewhere to go.
- Fixed a super rare crash bug in world generation where a particular name archetype struggled to find a piece of data it needed to generate a person’s name.
- Weather now correctly updates when you’re on foot and dawn, day, dusk, or night come to pass (so basically weather updates four times a day, but if you move from map tile to map tile and a full day increments, the game does four calculations all at once).
- Weather also now correctly updates when you cross a map tile on foot rather than doing so via the fast travel menu.
- The sun level on the weather meter now correctly declines with dusk, disappears at night, and comes back in a small way at dawn, rather than showing a hypothetical sun level even at night time (whoops).
- Statues holding spears no longer sometimes fail to generate correctly.
- Fixed an issue where a lake could, very rarely, generate right in the middle of a city district, and result in dozens of houses and building floating, unmoored, in the resulting water.
- Fixed a few textual issues with how weather changes are described, e.g. it shouldn’t be able to say “the fog has thickened” if there was no fog in the first place to do the thickening, and should instead say “a fog has descended” (and the same for raining, snowing, sleeting, etc). Same is also true for changing things like “it is raining less heavily” to “it has stopped raining” if the outcome is 0, rather than just simply a lower number than it was before.
- Fixed a crash bug where trying to destroy a melee weapon would lead to a crash because the game was unable to figure out what type of weapon it was, and hence what word (“knife”, “axe”, etc) should be used in the text.
- Plants can no longer generate on top of statues.
- Destroying something you are currently wearing or wielding does indeed remove it from being worn or wielded, rather than having a ghostly after-image of the item linger on in some kind of dreadful half-life.
- Smaller manors / mansions no longer sometimes spawn truly ridiculous numbers of servants / slaves to take care of the building’s needs.
- The freckles on be-freckled NPCs no longer magically reposition themselves each time you look at them.
- Religious buildings can no longer very rarely spawn in a layout where there’s a piece of wall directly in front of the player as they enter the building – this could be walked around, but looked awkward and silly, so has now been resolved.
- Removed a small number of very silly god generation options – such as a monstrous demonic god holding a nice flower – while still keeping the overwhelming majority. (A couple like that were just too daft and had to go, but the remaining 99.99% of possibilities of course remain in).
- Reworked some of the tribal / hunter-gatherer clothing so that it no longer looks quite as weird and gross as it previously did (partly yet another hangover from the Python 2 -> Python 3 conversion), though it honestly still needs some more work later.
More in a couple of weeks! As ever, if you enjoyed this post, please do think about sharing it around with people or in communities that might be interested :). I really do appreciate it a lot whenever I spot a new source of traffic coming onto the site. Thanks again for reading everyone, and see you in a few weeks…