More and more NPCs with working AI

———– Call For Playtesters ———–

Firstly this week, before anything else: I’m still looking for a small team of playtesters to test out all the AI stuff in the next URR release, probably starting some time next month. If you’re interested, please send me an email to mark at this domain name, and also link to your Twitter, or Facebook, or something that shows me a little about who you are, and just give me a line or two about why you’re interested and how much time you’d realistically be able to give it – please be honest! I want people who can really contribute to making 0.8 the best it can possibly be. I’m recruiting people to basically wander around the map, go into every building they can, check the NPCs are there and behaving sensibly, and do everything they can to mess up the schedules of the important NPCs. I’d suggest being able to commit at least 6+ hours would be a decent start, but I might ask for more if someone quickly finds a major bug, which I correct, and then upload a new playtesting version. Either way: if you’re interested, give me a shout! I should add, though, that’s it’s possible I’ll just decide to upload an explicit “beta” version with some massive warning saying THIS VERSION MAY NOT BE STABLE and let everyone test it… or I might not. So I’m not yet certain whether I’ll do a closed or open playtest for 0.8 (which I’ll probably just call 0.7.5). But to give me an elite team in case I do decide to do a “closed” test, please let me know if you’d be available by the method outlined above…

———–———–

This week we’ve been continuing to really push Roguelike Radio towards a major re-launch: our recent episode on Strategic and Tactical decision-making is particularly excellent, I think, and I highly recommend it. Meanwhile, we have another fairly big update this week, which is pleasing, since it shows that things are progressing at a good pace (although I do have a fortnight’s work here, so naturally there’s bound to be a lot). I’ve covered a whole bunch of new NPC types in the last two weeks, and it’s proving very reassuring that the pace at which I’m moving through these things continue to accelerate. Much like I said in the entry before my Umberto Eco post, at this point the task is more “check each bit of code works for each kind of NPC” than “add major new bodies of code”. It’s slow and difficult, but it’s coming together, and it feels so reassuring and pleasing each time a particular class of NPC seems to be working correctly and I can move onto the next one. Here’s a run-down of what we’ve had added since I last URRpdated you all:

Merchants

It turned out that merchants weren’t even close to finished, due to a significant complexity in getting NPCs to spawn at the right time when they are moving between things on a single grid of the world map, i.e. in this case they both live in work in the same district. This needed a lot of new code that would note when they should be spawned in certain scenarios, even if the player hadn’t seen them acting before then, but as far as I can tell this now works perfectly. The code should also carry over into a range of other NPCs that I’m slowly working towards testing, but suffice to say, merchants now appear in their shops at the right times and don’t appear at the right times. Here’s a merchant going from their house, leaving it, wandering across the map, and going into their shop to start the day’s business.

Housetoshop

Non-Cathedral Priests

Priests in standard religious buildings now behave appropriately, find their way up to the correct floor when they sleep, etc. Here’s a priest deciding to turn in and going to their bed – and this would happen in the abstract too, of course, if the player wasn’t nearby:

And then later on, they wake up, head downstairs (I foolishly let them get a few tiles ahead, but you can still see that we’re following them in a few glimpses on the upper floor), and start going about their way, in this case first settling down in one of the chairs in front of the altar.

Jocasta

And here’s a priest in another church going up to their bed late in the evening:

Priesty

Archive Guards

Archives – found in crypts, below cathedrals, and only in theocratic nations – now always have their guards switch over correctly. This necessitated a little extra complexity because they aren’t on the ground floor, but I’m pretty sure this now works correctly no matter what. Here’s a changeover from the outside, into the crypt, where the guards switch…

Guardchive

…and then the other guard heads upstairs, and out! (From a different crypt that was generated later, hence the change in layout)

Guardgoesout

Arena Guards

Arena guards now change over correctly, which means that at this point, I *think*, all guards, whether inside or outside, all work correctly on their schedules. It’s very possible that some other weird bugs still lurk out there, given the complexity of the thing, but I’ve been going around trying everything I can think of to break the game, and thus far I haven’t been able to.

Arenaswitch

And they get home, and I immediately barge in:

Guarhome

Archivists

Archivists have a super-simple schedule – get up, work, go back to bed – but they now do it correctly regardless of the player’s actions. I entered crypts at various times of day at various points in their schedule, and always found them correctly sleeping or working at their desk regardless. Here’s a gif of an archivist deciding it’s time to call it a day (they do sleep in the crypt/archives beneath a cathedral, which might make them a little peculiar once the conversation system is implemented). These NPCs were also quite tricky because they have various bits of special code determining where they should be sitting most of the day, and their relationship to the guards around them, and they aren’t on the ground floor of the building which adds to code confusion, but still, here we go:

Arcgisleep

A little bit of dialect generation…

In a spare couple of hours in the evening of Friday 19th, I officially started work on dialect, and therefore speech, and therefore conversation, generation. I have almost nothing to show for it yet, and I’m not really going to dedicate much time to it until all the AI stuff is working, and I’ve distributed the special playtesting version, and I’ve taken a week or two off, but: even from the earliest things I have right now, the variety is going to be amazing. More on this in a month or something, but I just had to take a minor break from coding this never-ending AI nightmare, and I’m incredibly excited about how speech generation is going to look.

Next Week

I’ve been doing the AI for around three months now. You all know the drill. MORE AI STUFF!!! As I’ve said before, though, the amount of new stuff I’m adding is slowly decreasing as time goes, and most of the time now is testing the existing code for every variation of NPC in every scenario. There will come a time when the issues of URR’s AI are finished… but alas, it is not this day. But soon!

Umberto Eco and URR

———– Call For Playtesters ———–

Firstly this week, before anything else: I’m looking for a small team of playtesters, probably around a dozen, to test out all the AI stuff in the next URR release, probably starting some time next month. If you’re interested, please send me an email to mark at this domain, and also link to your Twitter, or Facebook, or something that shows me a little about who you are, and just give me a line or two about why you’re interested and how much time you’d realistically be able to give it – please be honest! I want people who can really contribute to making 0.8 the best it can possibly be. I’m recruiting people to basically wander around the map, go into every building they can, check the NPCs are there and behaving sensibly, and do everything they can to mess up the schedules of the important NPCs. I’d suggest being able to commit at least 6+ hours would be a decent start, but I might ask for more if someone quickly finds a major bug, which I correct, and then upload a new playtesting version. Either way: if you’re interested, give me a shout! I should add, though, that’s it’s possible I’ll just decide to upload an explicit “beta” version with some massive warning saying THIS VERSION MAY NOT BE STABLE and let everyone test it… or I might not. I haven’t decided yet. But in case I decide to do a “closed” test, please let me know if you’d be available by the method outlined above…

———–———–

So, I had a full blog post on AI stuff coming up this week (another week of big progress, I’m pleased to say, with priests, mercenaries, more guards, ambassadors, clerks, diplomats, and various other classes of NPC all working correctly), but I learned upon waking up yesterday morning that Umberto Eco, one of my absolute literary and intellectual idols, has died. As such, I feel compelled to instead post this week some thoughts on Eco’s work (both scholarly and fictional), his massive inspiration on URR (which I’ve written a bit about before), and his impressive balancing act between work in academia and the creation of artistic work outside. If you haven’t read his brilliant work, and you’re the kind of person interested in URR, I strongly recommend going to read The Name of the Rose, Foucault’s Pendulum, and/or Baudolino, for yourself.

Eco is well-known in academic circles as a semiotician, and to a lesser but no less significant extent a literary critic and medieval historian. He was probably most famous for the idea of the “open work”, developing earlier “death of the author” concepts into a more concerted argument that texts of all sorts (games included) do not only have a single meaning, i.e. the meaning intended by the author, but rather that there are many other meanings dependent on readers, contexts, and so forth. After that most of his work focused on developing the importance of context, setting and previous experience to the deciphering of signs, most famously in (the rather excellent) Kant and the Platypus. This latter body of academic work in particular has had some influence on URR, but the most important aspect of Eco’s work for those of us who read (and write) this blog is his first novel, The Name of the Rose, with which he came to massive prominence after its first publication in 1980.

Ecopost1

The Name of the Rose has two overlapping stories. One is a murder mystery, of sorts, where various people from the Abbey are slowly being killed, and it becomes apparent over time that the methods of the killings might be drawn from the bible and have something to do with a particular lost book from pre-christian times. The second involves a conference being held at the same abbey to determine an issue called the “poverty of christ” – whether or not he owned the clothes he wore, or whether they were lent to him. This second point might seem deeply irrelevant, but is actually of immense importance to the world of the novel. One of the things I find most interesting about the novel is its placement in an era where what we might not disparagingly call “academic debates” were not, in the negative use of the word, purely “academic” – they had massive real-world impact. It might seem completely irrelevant to decide whether a particular figure from a particular religious mythology owned his clothes or not, but doing so would have massive impact on the everyday life of Europe. If it was agreed that the son of the christian god did own his own clothes, then that demonstrated that the divine had (presumably) purchased these clothes, and thereby had material possessions. If not, then not. The real-world relevance of this then becomes: should the church and the pope be allowed to own possessions, as the representatives of the divine on Earth, and thereby accrue immense wealth (so they naturally supported the “yes, he owned his clothes” side), or not? (European monarchs, cautious of the church’s strength, argued that he did not, and therefore the church has no right to have such wealth). On my first read as a teenager I didn’t appreciate the link between these two stories, but without giving too much away, both the murder mystery plot and this secondary plot are both effectively discussions about the degree of power the common people should have over the church, and over rulers and those of higher social rank more generally. They intertwine amazingly well whilst demonstrating the depth and complexity in both the lost book, and this religious debate, and their potential (or feared) real-world impact on all of Europe.

When I finally figured out what URR was going to be after a year or so, it was (if I recall correctly) a re-read of The Name of the Rose that finally made it clear in my head – it was going to procedurally generate the kind of cultural/religious/semiotic mystery that the characters in that book find themselves grappling with. It was going to distribute clues across books, paintings, cultural behaviors, historical events, ideas themselves; and the player’s central goal would be the deciphering of this procedurally generated, and procedurally distributed, semiotic-ish mystery. Over the last few years we’ve wound up with a hyper-detailed world this mystery can (soon, soon!) be inserted into, and I’m confident that in a couple of years URR will look, at least in part, just like the kind of game Eco would have made (were he a game designer). I’m hugely grateful for the book helping me work out where I was actually going with this monster project, and in suggesting a core gameplay mechanic – i.e. the unraveling of that mystery – that should end up being totally unique and unusual.

Equally, I was always also a big fan of Eco for his melding of academic and creative work (which, as you’ve probably noticed, is what I’m aspiring to myself). I think games are a particularly excellent field to pursue this in – I know of a lot of academics who write fiction and have found that it can reduce how “seriously” their scholarly colleagues take their intellectual work, but the opposite seems to be the case among the few games academics who, like me, also produce games; putting one’s ideas into practice seems to be a respected accompaniment to more scholarly inquiries. He struck this balance extremely well, and that’s certainly the kind of goal (in game studies and game design, rather than medievalism and literature) that I’m aiming for. I’ll be very sad to never read a new Eco (although I still have to read his latest two), but Eco’s ideas will certainly live on in a massive range of work, not to mention (in some currently small but soon quite significant way) in URR too. He was a totally unique author, a towering thinker, and one who somehow turned the dense, “historical metafiction” novel from something seemingly niche into a massive phenomenon. If I can manage a fraction of that for games instead – that won’t be half bad, I’d say.

Next week?

Back to AI, and I promise to try and get the blog update out on Saturday! Blog posts have been pushed back later and later on Sundays in the last few weeks, and I’d like to try and do something about that. Since I’ll have a fortnight’s worth of stuff to update you all on by next time, that should be a nice big AI update. See you all then!

Further AI Agony

Another big one this week! Even though AI is still not finished, it feels as if things are moving quite a bit smoother now. It’s less like I’m adding in new code, and more like I’m just tweaking the code to make sure that each class of NPC in each situation (particularly more unusual ones like monasteries and castles) behave correctly. This is still going to take some time, but the major mind-numbing difficulty of the actual coding process is pretty much finished; now it’s just a mopping-up task to make sure tellers can use the code written for monks, soldiers use the code for guards, and so on and so forth, and that everything is suitably applicable to every scenario rather than the small subset of scenarios I originally used to get the system up and running (i.e. guards). As such, this week a lot of new NPCs have started working correctly in their schedules, and various amusing or peculiar bugs found along the way have been fixed. My rather bold goal last week of finishing AI entirely hasn’t been met (ha! I was so naive, and will never make such an absurd prediction again), but we’re still getting closer and closer, and it certainly emotionally feels like the home stretch… at long last. Sorry again for the late-evening update; there’s just so much to do that I find myself coding all day and then suddenly quickly typing the update post before I go to sleep…

Tellers

Tellers now go about their day correctly. The bank remains open all day for people to come in and sit down and wander around, and guards naturally keep guard all day but the teller is only there in the day time. I’ll probably change it at some point so that once the teller exits, ordinarily people won’t path into the bank, but for now that’s going to be how it works, since there are only so many tiny additions and minor things that 1/6000 players will notice, that I can implement in any given release. Here’s a teller packing up and deciding it’s time for a relaxing snooze:

Tellergoes

And the same from outside:

Toddleoff

And entering their home, with a rather jumpy gif due to the volume of de-bugging stuff happening in the background, but you can still see that the teller enters, realizes they need to find the stairs, finds them, goes up them, finds bed, goes to bed.

Telhouse

In the process of handling bank tellers I also discovered a weird bug where either priests could spawn in a middle-class map grid, or bank guards, but not both. This was a result of a silly “elif” where I should have written “if”, and this promptly got fixed!

Priests

Priests seem to be doing their thing correctly! Priests (and worshipers) doing their normal routine in the day time:

Cath

And then I left, came back at midnight, and sure enough found the priests sleeping in their cells:

Goodpriests

And then, at the appropriate time, the priest awakes and starts doing her thing!

the kraken awakes

Merchants

Look at this merchant going into their shop first thing in the morning!

hot merchant action

Truly magnificent.

Walking Through Walls

Found a funky glitch involving pathfinding through cities that wasn’t correctly taking account of where doors inside and outside the city actually went. Basically, in this city, an AI was trying to take this path:

Problemcity

Once I was in the grid below the one in the top-left, it couldn’t spawn properly since it was trying to spawn at a gate that didn’t exist. The path had been allowed because, sure enough, none of those map grids were blocked – i.e. were oceans or mountains or deserts – and a pathfinding map of the area basically looked all green, and didn’t take account of where gates are and are not! I tried to find an elegant solution to this problem, but failed, so I just changed the city pathfinding algorithm to consider any tile outside the city to be blocked (and I’ll think of a more elegant solution later, for when I want NPCs to move from city to city). So before, the pathfinding grid for these map grids looked like the one on the left, and it now looks like the one on the right, so city NPCs have to move always within a city, even if going out-and-in would be more efficient, because taking account of gates is too damned confusing.

Problemcity

Pleb Purge

I noticed a tiny weird bug where sometimes, upon entering a map grid in which the NPC needed to “catch up” to where they should be and would have been if the grid had previously existed, they would reach a tile away from their destination (e.g. a door to a building or gate to another district) and then just dance around the tile for a while. It took quite a while to figure out the issue, but the problem was that the game was spawning the random crowd NPCs *before* getting the important NPCs to catch up to their positions, and so there was a truly tiny chance (I probably encountered this in 2/200 game loads before I figured out the issue) that a random crowd NPC would be spawned on an important NPC’s target square, and prevent them from reaching it. Therefore, when you enter a grid, the game now ensures that a) there are no random NPCs standing in the exact tiles in front of gates to other districts, and b) that there are no random NPCs seated on the exact “endpoint” tiles of any important NPC. As such, from what I can tell, this weird little bug (which admittedly wasn’t a game-crashing bug, but still merited dealing with) has been resolved.

Other Bug

Also ffound one bug where certain important NPCs, upon leaving a building, wouldn’t change their internal x/y coordinates to an appropriate external set because they were looking for the wrong kind of door, which resulted in them leaving buildings and being magically transported on top of buildings, into lakes, into trees, etc. This no longer happens.

Next Week

Well, more AI stuff, of course. What else?!

LAST BUT NOT LEAST

Since AI stuff is proving so complex, I’ve decided not to move forward the release – I still think the conversation system is absolutely vital – but I’m going to put out a secret, intermediate release, to a small team of playtesters, to make sure that the pathfinding system all works correctly. Despite my best efforts, there’s no way I can really test every single possibility exhaustively. If you’re interested, leave me a comment! This won’t be until probably next month, and would require you to basically wander around the world, entering buildings, looking for NPCs, leaving buildings, entering other map grids, and just basically doing anything you can to upset their scheduling.

Scheduling Almost Finished

A big URRpdate this week, as we hit around 80% completion on the scheduling and pathfinding for all the world’s important NPCs, and also add some smaller additions like banners, drawbridge chains, and finishing off the upper floors of castles. At this point you can now track NPCs leaving their home and going INSIDE buildings – and this again works regardless of what the player does, where the player is, what maps/buildings have thus far been spawned, etc. This is, to put it mildly, a landmark moment. It works completely for guards in mints, and banks (though I have yet to test arenas and archives, but those are the first tasks I’ll be working on checking this coming week). It’s always hard to tell how much code written to deal with Situation A will actually also apply to Situation B until you give it a shot, when the Situations in question are so complex and have so many variables, but I think this code should be entirely transferable. I hope.

Scheduling

So, it’s time for some gifs! Various gifs here of guards leaving districts, entering districts, entering buildings, leaving buildings, exchanging guard duty with others, etc. Guards now work correctly for all outside guards, and almost all inside guards work correctly, and any and every weird combination of movement across the map and the player’s actions also, as far as I can tell, work perfectly.

ComiginIntobulidingBankswitch

intogate

Guardout

However, all of this has given rise to a very amusing bug. So, consider this: the world map is split into map grids, each of which is 200×200 tiles when spawned but naturally starts unspawned, and each map grid might contain a range of buildings. When the world is generated I can check exactly what buildings will be in each district, but naturally in most cases I don’t know exactly where each one will be placed – since that would entail spawning the entire map, on the human rather than world scale, at world gen! Which would be absurd and take probably the best part of an hour or something, possibly more (I’ve never tried it and don’t intend to).

Now, consider this. The player is in Map Grid A. In Map Grid B is a guard, who is due to leave their house and move into Map Grid A, to relieve another guard on guard duty. Map Grid B has never been spawned. How long, therefore, should this first action – moving from B to A – take? No matter how any map grid spawns, moving from any point of a map grid to an appropriate edge can never take more than 200 turns, and therefore all movement of this sort, in unspawned areas, takes 200 turns. Were it spawned, it might “actually” take 20 turns or 190, but we have no idea what the correct number would be until spawned, and since it hasn’t been spawned, I play it safe and assume 200.

With me so far? Splendid. Now, let’s say that the guard leaves their (unspawned and nonexistent) home at turn 1000, and therefore is due to leave Map Grid B and enter Map Grid A at 1200. Now, the player is sat in Map Grid A. If the player waits until turn 1190, and then enters Map Grid B, it will then spawn all the buildings and have the NPC do 190 turns of their action. However, what if this building is near the edge to Map Grid A? Let’s say they get there with 90 turns left. Ordinarily, they would go through, and then take 90 turns on the other side… but that would mean if the player immediately went back through, from the player’s perspective, upon returning to Map Grid B, it would appear as if in two turns an NPC had just appeared and teleported ninety tiles up the map grid! Therefore, if an NPC is just about to cross grids, and the player is about to enter that grid, it takes them to an earlier step in their movement so that the player, just entering Map Grid A, sees the NPC for a few turns before they go into Map Grid B. However, what this means, is that if the player keeps hopping back and forth, the NPC keeps getting pushed back and never actually moves through until the player goes somewhere else! It’s very silly. I’m not sure how to fix it yet, though it probably needs some kind of counter that notes if the NPC has already been pushed back once in its current district, and resets after moving to a new grid. But still: it’s an interesting example of the complexity of the system, and some of the weird situations that arise, and how I’ve tried fixing them.

To further illustrate this point, here are some examples of the scenarios that can arise:

  • Player is in a map grid and an NPC moves into that map grid, and should physically spawn.
  • Player moves into a map grid, and all stationary NPCs outside buildings (e.g. guards) must spawn.
  • Player moves into a map grid and another important NPC is moving in that map grid, and must spawn in the right place, an appropriate way along their schedule according to the timing of their schedule.
  • The player follows an NPC into a new grid, and the NPC should be x turns away from the edge of the grid once they are spawned, despite having been unspawned after leaving the player’s grid.
  • NPC enters unspawned building, player stays in grid, things must happen in building that doesn’t exist.
  • Player is in grid with unspawned building and NPCs within that unspawned building need to leave.
  • Player is in grid, NPC enters building, player leaves, NPC must be handle its behaviour in unspawned building and unspawned grid.
  • As above, but player enters building first, leaving a spawned but unloaded building in a spawned but unloaded grid.
  • Player enters building part-way through NPCs doing behaviours within it, causing it to spawn for the first time, and they should all be at the right part of their schedules…

Basically, consider every variable of 1) the player’s action, 2) spawned grids, 3) spawned buildings, and 4) important NPCs moving through all these, and I cannot begin to describe all the variations. Naturally in many cases a piece of code I wrote to resolve Scenario #14 also worked for Scenario #26, and so forth, but in many cases it didn’t and a massive amount of code had to be written to handle every possible variation and permutation. But I think a large part of it is now done.

Drawbridge Chains

What is says on the tin, really.

Chain

Next Week?

Dare I hope… AI pathfinding/scheduling… finished?!?!?!?!

Banners and Castles

I was hoping for a large scheduling/AI update this week, and although significant progress has been made, the game’s code is currently quite unstable and uncooperative for the taking of screenshots, and replete with bug-tracking code that slows the game down to a crawl and makes taking nice gifs quite challenging. So, rather than doing a scheduling-and-other-things update this week and the same next week, I’m going to do a brief other-stuff update this week, and a much larger scheduling update next week with a massive volume of screenshots. Aside from the improvements to scheduling, two small other things have been done this week – banner graphics, and the upper floors of castles. That’s all for this brief post, I’m afraid, but we’ll make up for it next week with a massive and more tech-focused AI entry.

Banners

I’ve generated the graphics for banners, which are somewhat like flags except they can only be found inside castes, and probably inside mansions and manors as well once I get around to adding them in. In castles, in vassalage nations, you will always find a corridor lined with the banners of all the lesser houses in that nation. Here are some examples (the frills at the bottom of course vary with civilization preference shape) – these are quite simple, but I’m very content with how they look, and that’s another one I can tick off the list of the last remaining graphics for 0.8. With that said, they might be just a little dark, so I may lighten them just a tad.

Banners

Castle Upper Floors

I returned to the upper floors for castles and made some major changes, almost entirely in order to just make them less boring, as they were looking rather uninteresting beforehand and a bit too hand-made. The system used here is again (like castle basements for slave quarters, dungeons, etc) quite similar to the algorithm used in crypts to connect areas and draw corridors, and so forth, but this one is rather more fluid. It places all the important rooms first, including a harem if appropriate (the new dark red icons you see there are the reclining couches we talked about last time, and their colour varies according to the coat of arms of the house to whom they belong), and then ensures they can all path back to the up staircase that brings you to that level. This first stage results in something that looks like this:

Norm up

If the castle is smaller and there’s a garden in the centre of the castle, you get something like this, since it’s rather harder to generate appropriately – but I actually rather like it! You’ll note that in this case the harem is not placed directly adjacent to the master bedroom, since in many cases that wouldn’t fit, but is instead positioned at a distance with a corridor that then paths in to the main sequence of bedrooms. This gif nicely illustrates the gap in the centre for the octagonal garden in the middle, then the player goes upstairs, and you can see the rooms loop around the middle bedroom.

Empty inside

I’m content with how these look – as ever, it’s hard to make upper floors fascinating when there are only so many ways to draw a bedroom, but they’re distinctive, they get the job done, and leave plenty of room for me to potentially add other things in the future, if anything useful presents itself. So now here’s a little gif using wizard/admin mode, to look at the three layers, from top, to middle, to bottom, to middle, to top. Note also that the corner towers where guards and soldiers live are present on both the ground and upper floor, but the overall shape of the castle is irrelevant underground.

Topbottom

And lastly (I just added this at the last second before posting this entry), here’s an upper floor for a democratic civilization that doesn’t have an ornate throneroom on the ground floor, but rather a bedroom with two sections – one for general governance and receiving relevant people, and a secondary part for the elected ruler to sleep in. Like ground-floor throne rooms, they vary heavily based on ideology, but in this picture you can see it in the top-left corner of the circular castle, and the middle of the “cross”-ular castle, both of which have harems attached (although roughly 1/3 nations will have those, I temporarily activated them for all nations just to help me test the room-placing algorithm).

Richupper

AI Stuff

Oh, all right  – one brief AI thing. The best thing I’ve seen all week is this debug screenshot, where guards were coming in and out of a mint from all directions and timings and data structures, and sure enough, they all showed up on time (displayed here as the white tiles) and every single guard was there, no matter what the player had been doing and what parts of the game world were spawned and loaded, spawned and unloaded, or unspawned and unloaded. The most beautiful image I’ve ever set eyes upon.

NPCS0

What next?

Moving closer to all this AI work being finished! I cannot wait to be done with all this and be able to watch all the important NPCs going about their days. Once all of this is done, and all the current minor bugs (~a dozen) are fixed, I’m actually going to take a week or so off from URR development. Honestly, the extended crunch to getting this AI stuff finished has been really tough and lengthy, and once it’s done, I’m going to recharge a little bit before I start work on dialect generation and the conversation system (though I will probably continue brainstorming those aspects in the interim). I have a particular game I’ve been desperate to play for a long time, and having finally acquired (second-hand) the console required, I’m actually going to give myself a little time off to play the thing. Don’t worry, blog posts will of course continue! But I do feel a little burnt out for the first time ever, and I just have to have a little coding rest once this huge block is finished, so chances are next week will be “AI is almost finished”, the week after will be “AI is completely finished!!”, the week after will be something else, and maybe even the week after that, and I know this will push back 0.8 a tiny bit further but I just really need a bit of a break. Once that’s all done, though, we’ll start thinking about dialect generation. See you in a week for a big AI update!