Final Bugfixes

Welcome to 2016 everybody! This is going to be a fairly substantial post, since with the last two entries being non-game-dev ones – announcing my first book and 2015 in review – a lot has built up. I was originally going to do two posts, one on bugfixing and pathfinding/scheduling (this one) then another on finishing clothing generation (next week) but pathfinding/scheduling has been such a huge and challenging task that, actually, I’m going to keep them as three entries, simply because I haven’t finished it yet despite basically working on it all day every day for the last week. So my goal by the end of January is to get all of those things finished, and the addition of a few other required elements, and after that we’ll be moving onto conversations, dialects, speech and the like, which is the last component of 0.8! Though it is also a fairly sizable one. Nevertheless: this week we have the the fixing of a truly momentous list of bugs and minor issues that have arisen in the 0.8 development process up to the present date (some of which are rather amusing).

Bug Purging

So: as far as I can tell, all the remaining significant bugs of 0.8 have been dealt with (excluding of course bugs that are arising in the process of handling the scheduling/pathfinding on thousands of important NPCs across a massive world map of varied saved/loaded/unspawned areas and buildings, but those are being dealt with as I go). Here’s a run-down:

  • People in banks now only sit once and then go straight back out, rather than sometimes moving from chair to chair for no apparent reason.
  • Fortress people actually go to the right houses/barracks instead of soldiers rarely wandering into a house and vice versa.
  • Fixed a minor issue where there was a tiny, tiny chance for tiny portions of roads to generate incorrectly and result in dead-ends (I have seen it literally only once in the last 100+ world generations I’ve done for testing purposes, but I think it is now sorted).
  • Resolved a weird problem in fortresses where people would bounce back and forth between guards; this was due to certain tiles requiring permissions that shouldn’t have required permissions.
  • Diplomats no longer just wander out of their embassies as soon as you go inside, and then have no idea where to go.
  • A huge range of issues with castle generation have been resolved, and as far as I can tell, all castles generate correctly regardless of aesthetics, cultures, religions, inhabitants, etc. Hurrah!
  • Monks and abbots no longer sometimes all decide, collectively, to run around like headless chickens for a few minutes upon entering their monastery.
  • Graveyards have been disabled, pending a significant redesign in the future to aid in clarity and the player finding what they’re actually looking for (this will associated with redone history/family generation).
  • Delegate housing in monasteries in democratic nations is no longer sometimes squished up against a wall.
  • Stopped abstract NPCs who move between grids to perform an action from finishing that action one grid early.
  • The “troll churches” (where there are multiple staircases to multiple parts of the same floor) have been removed, partly because they were proving deeply infuriating, and partly because it added a lot of unnecessary AI pathfinding confusion. I’m sorry for ever including these bloody things.
  • Fixed yet more issues involving the numbers of guards to be spawned for various buildings in city centres – I think this set of problems are finally all resolved now.
  • Fixed an issue with hunter-gatherer houses containing more than two doors, the entering of which tended to yield a crash.
  • Middle-class districts can no longer generate layouts of houses that resemble swastikas. This was… unfortunate.
  • Fixed a rare issue where gardens would take precedence over more important things in city centres, leaving some NPCs with nowhere to go/live/work.
  • Fixed a rare issue where the leaders of groups of NPCs would sometimes “bounce” against the end of a road and turn around.
  • Ensured that groups of NPCs don’t sometimes just run into dead-ends, but path to some other road just like any sensible person would.
  • Fixed an issue where guards for an embassy would rarely fail to spawn.
  • Fixed an issue with crowd NPCs disappearing upon save/load.
  • Discovered an issue I thought long-fixed in middle-class houses placing their internal doors in weird places, and resolved it.
  • Slum houses that are 3×5 or 5×3 in tiles now generate correctly.
  • NPCs entering generated slum houses are able to find the appropriate place to go and find their way back out again, rather than freezing due to “thinking” the slum house is a lower-class house.
  • Certain shops no longer cause a strange crash in towns.
  • Town roads are no longer sometimes at a strange height compared to the surrounding area, and can now only be one z level above or below their immediate nearby tiles. This looks far more sensible.
  • There are no longer issues with the road systems in middle-class districts… I think.
  • Delegates now actually work in middle-class districts and don’t freak out from the massive range of homes they can choose from.
  • Delegates now work correctly in upper-class districts, and most challenging of all, they work correctly in religious districts too – you can now find delegate homes in all appropriate places and go inside, and find what is basically a more ornate version of a middle-class house (unless the delegate lives in some other more specific place).
  • Flags outside mints that contain delegates are now placed correctly.
  • Resolved a problem with single-tile islands of territory.
  • Fixed weird bug with delegates in districts that contain both “district” delegates and “other” delegates, and they didn’t always spawn in the right place…
  • Fixed yet another middle-class issue where houses would sometimes combine with one another to form a massive uberhouse that stretched across a significant portion of the district. Bizarre.
  • Fixed a minor issue with the territory map that would sometimes show settlements where there weren’t any.
  • The player is now actually assigned to the right civilization!
  • Clerks and diplomats have been elevated to the status of “important NPCs” and will therefore be able to gain unique identifying information.
  • I thought I had fixed this last time, but now for sure – entering certain buildings does not encourage all the servants/slaves to bolt out the front door.
  • Resolved a significant suite of bugs involving stairs, NPCs, the player’s location, pathfinding, moving between floors, etc, that lead to a whole host of crashes when NPCs tried to path to their own location, or stepped onto stairs where someone else was already using them, etc. The only tile where multiple people can stand is now a staircase, which can hold an infinite number of people, although realistically this will almost never be above two, and should absolutely never be above three.
  • Fortresses now contain merchants and outdoor shops – they have a larger number normally than city markets, and can contain multiple shops of the same type (whereas cities/towns cannot).
  • Vassalage nations always have enough towns to make being a vassalage nations worthwhile, and if they don’t and the game cannot fit in enough towns, their military policy is changed away from vassalage.
  • Roads always have a black backdrop on the territory map.
  • Fixed an incredibly rare bug with religious districts that also contained rivers by ensuring that a bridge can always spawn to give access across the river.

What’s next?

Next week could be a lot of potential entries; either a run-down of the second bullet hell world record I picked up a week or so ago, or a look at a bunch of new graphics for 0.8 in the form of tribal and nomadic clothing, or the conclusion of NPC scheduling (if we’re really lucky!), or something else. I’m also sketching out both how the dialect generation system should work, and how the actual conversation system will work, and I’m really looking forward to discussing these with you all in the coming weeks. See you next week for AI, clothing, bullet hells, or something else!

Be Sociable, Share!

22 thoughts on “Final Bugfixes

  1. “Monks and abbots no longer sometimes all decide, collectively, to run around like headless chickens for a few minutes upon entering their monastery.”

    I firmly believe that some bugs are better left unfixed for the sake of comedy.

    • Some of these bugs sound like the irritating Oblivion bug where entering a house makes everyone jump out of bed, then back in – “but they were always sleeping.”

      Swastikas – playing with simple random geometries (and word/name creators!) can too easily end up in some unfortunate corner cases… oops! “Please type the letters you see in the Capcha” can go really wrong… as I think they say elsewhere, the RNG is evil.

      Great work! Looking forward to the release!

      • Agreed, some really reminded me of issues in other games with lots of NPCs, lots of schedules, different areas that are loaded at different times, etc. Very true – I have actually removed the possibility of generating real-world symbols from a number of other areas of the game for precisely this reason. And thanks!

  2. “I thought I had fixed this last time, but now for sure – entering certain buildings does not encourage all the servants/slaves to bolt out the front door.”
    Reeking of nobility, I assume?

  3. ” and how the actual conversation system will work, and I’m really looking forward to discussing these with you all in the coming weeks. ”

    Cool. I think you’d consider having collectable, quest-related topics like DF, I think those would fit within an open-world during the play (I mean I always thought the main character is supposed to say something first).
    You could perhaps have optionable topics, as it to make them available only when there’s a interaction/content between an argument and a NPC, or instead leaving them listed fully in order to let the player figure out what’s up to say with the talks.

    • I think something of that sort will happen; certain actions or events unlock certain conversation topics with certain classes of NPC who have things to say on those topics. As for the latter suggestion, I am considering some slightly more complex system where you don’t have limited conversation options, but you rather “construct” sentences from components… but that would have to be very slick and efficient to not get tedious! Or maybe a set of standard conversation options and the ability to create your own?

  4. I thought a bit about the conversation system.

    I’d imagine it looking like DF convo system, but instead of menus, submenus and subsubmenus, you would instead have a small textbox fit for a dozen characters. I would imagine you inputting…:

    “talk about local king”
    You would then either be…
    1. prompted to confirm starting a random topic (that you already know or just rumors. Family, wealth, power, anything) about the current, local ruler. If you don’t know the ruler in the first place, then you would ask who the ruler is (confirmation needed, too, unless your self-control attribute(if attribute exists) is low, which makes you outright ask it).

    2. given a menu containing all permutations of topic about the local ruler. You would choose.

    You could “talk”, “whisper”, “shout”. You could “recall” to refresh your memory and restore topics once forgotten, or you could simply “read” your journal to bring topics to mind. People might be a bit suspicious to you, though. And of course you could just walk away and do all that alone. Why don’t you prepare your speech before?

    There would also be the possibility of the action words I described to be assigned to a key, possibly making conversations in URR even faster than RL chatting.

    And BTW, RPS made a post about NPC schedules. I hope URR will someday be a pinnacle of a virtual, fully interactive, living world.
    https://www.rockpapershotgun.com/2016/01/06/the-joy-of-npc-schedules/

    • amazing stuff. dialogue intaraction can really go on forever, but it’s always worthy. I think having sets of “topic /knowledge behaviour” would be the way to go for such a large scale and amount of NPCs, the idea of having the possibility to talk about whatever you want with anyone other than just regolar quest-related stuff just blows my mind.

      • Well, conspiracies are a thing in URR, so talking about almost anything that might contain a clue would be plausible to talk about. Heck, there might even be political prisoners that would only talk to you in cryptic speak.

          • Does that mean more extensive world history generator? I’d love to dip in fictitious history books and read them as if they were fiction novels. Jail breaks! Sieges! Assassinations! Coup d’e tat! Heroic battles!

            I mean, games with procedurally generated plots are essentially story generator, right? Stories about foiled spies or triumphant war generals in libraries should be very interesting (for the nation’s propaganda!) and be actually useful for the reader, whoever it is.

          • Oh yes, at some point the current history generator will have to be thrown out (it’s too simple, and writes stories instead of storing information that can be distributed elsewhere) and replaced with a far better option, which will come just before I start distributing the clues to the conspiracy throughout the game world (i.e. in generated books, etc!). But yeah, all of those events should be in the history, and they aren’t currently, which necessitates a bit of a re-write. I try to avoid re-writes, and I haven’t really done any in the last couple of years, but this is one aspect that definitely needs a major upgrade in content, and change in data structure.

      • Heh, you’ve put it well – this can be a huge topic, but it is a huge part of the planned gameplay, so I should take the time to make it really unique, really deep, and really interesting. I definitely like the options of talking about anything with anyone even if they won’t give you anything of note, or might report you to the guards for asking suspicious questions about the failed poisoning attempt on the God-King, etc…

    • What you’ve described here is actually pretty close to my current thinking. I like the idea of having various conversation “volumes” (talk, shout, whisper), various conversation types (aggressive, peaceful, inquisitive, whatever) and broader and more specific topics. Equally, I want this to tie into the dialect system and the ability for the player to try to mirror certain dialects in order to pass as a person from Nation X when they are in fact from Nation Y. The idea of assigning conversation options to a key, though… wow, that’s just given me a bunch of really fascinating ideas for some kind of wacky graph-based conversation system that you “move” through. I’ll have to think about that one a lot more!

      • Binding verbal actions would change conversations into a rhythm mini-game in which you might try to sound like a person of another nature… That’s it! …or not. It’s a roguelike, after all. What is not bound to key(s)?

        How would dialects affect conversation, though? Would it be different sentence structuring, filler words, or just voice difference that the player character needs to learn in-character?

        • Heh, I didn’t have in mind a rhythm game in the traditional sense, but more like a grid of possibilities in a conversation that you move through… or not, as you say. Just something to ponder. Dialects will have different sentence structures primarily, and different expressions, and I somehow want the player to be able to mirror those. That might just mean “selecting a dialect” once you’ve “learned” it sufficiently (heard over x sentences in that dialect?), or maybe for every sentence in it you hear, your chance of emulating it goes up by x%? That might be a more sensible system…

          • Well, it is more sensible than constructing a gargantuan system of dialect structure forming *and* structure form recognizer formed from built-from-scratch neural network, which is what I had in mind.

Leave a Reply

Your email address will not be published. Required fields are marked *