ProcJam 2015 Report

This week I’ve been profoundly busy with work-stuff and other-stuff, and I’m basically working through a large backlog of minor bugs and issues and optimizations I’ve accrued through the coding of the last few months, so this week I’m going to write a report on this year’s ProcJam opening talks (which I was fortunate enough to be able to attend yesterday at Imperial College London) and save the next URRpdate for a slightly longer post next week.

Due to a tremendous train-related farce I missed the first part of Kate Compton‘s talk, which was the first of the day, but I was able to catch most of it. She talked extensively about a simple array-based model of procedural generation and showed a range of examples of what this could mean – flowers, faces, bizarre aliens, snowflakes, dance moves (which I thought was particularly amusing and interesting, and which if I recall correctly the below photo is from) and much else, and in hindsight seemed to slightly preface Tom Betts’ later talk about the value (which will obviously be something familiar to readers of this blog) of doing PCG for its own sake, and generating interesting/beautiful/intriguing things for their own value, rather than necessarily with a specific gameplay goal or longer-term objective in mind (although URR does, of course, intend to make every image gameplay-relevant in the longer term). A really interesting opening talk, the highlight of which was rapidly generating similar-but-slightly-iterated trees/plants, which looked really tremendous and should be on the ProcJam video talks on Youtube once they go live.

Proc1

Next up, Sean Oxspring and Kieran Hicks – who previously exhibited their work at the IRDC I organized earlier this year – gave a great talk about their various games using APIs and similar data. This includes #Dungeon (pronounced “Hashtag Dungeon”) which generates dungeon levels based on Twitter data (and they outlined various attempts to develop and iterate on this system), and then a game which used the UK National Election polling/sentiment-analysis data to get virtual politicians fighting, a game involving defending Wikipedia from malicious edits which attack the player in real-time, a bee-related game based on the changing seasons and the actual outside weather, and an intriguing, amusing and slightly disturbing game in the works involving a certain adult website API. It was fascinating to hear their experiments with games that drag explicitly on immediate data, and the issues with this – the Wiki game is only exciting when people are trying to mess up Wikipedia at certain times of day, the bee game is very monotonous throughout a given real-world season, etc – and it’ll be really interesting to see how their next games pan out.

Next, Dan Stubbs, the creator of unusual and potentially-very-impressive one-man game The Hit, gave an overview of the game to date and many of his higher-level artistic and design objectives, including (whether jokingly or seriously) the possibility of using cellular automata for beard generation, which rather puts my own paltry efforts to shame. After that Allison Parrish gave a really interesting talk about understanding and generating sentences via various dependencies and semantic/grammatical logics, and the weird things that systems using these types of data can produce, which is naturally very close to some of the work I’ll be doing on URR in the extremely near future as a conversation system begins to materialize. This was followed by Tommy Thompson‘s piece on the PCG infinite runner game he and his team are developing, Sure Footing, and a range of the player-side concerns they’re thinking about – difficulty, pacing, how people use different characters, variation and learning, and much more. And it has a very pleasing neon aesthetic, which should never be discounted. I also greatly enjoyed Tommy’s parody of academic ivory-tower behaviour, which is perhaps a little too close to the truth to be all that comfortable…

Proc2

The next talk was from Tom Betts, coder on Sir You are Being Hunted and various other highly intriguing games, and although we’ve chatted a few times in the past and he also gave a talk at IRDC, this really hammered home how similarly I think the two of us perceive issues around game design, procedural generation, games and/as/with art, game philosophy, player experience, and various other issues caught up somewhere in those fields. His talk argued for the value of procedural generation for its own sake, and as an artistic medium that doesn’t necessary have to be in the service of specific gameplay goals, but can be a goal in its own right in the creation of original/beautiful/compelling spaces for exploration, “sight-seeing”, and the like. He seemed just as interested as I am in trying things in PCG precisely because they haven’t been done before, and that that is an adequate and suitable rationale for committing time and effort in its own right. He also quickly went through a huge list of interesting games/quasi-games/experiences/things which embody this kind of rationale, and I’ll probably stick this list up on the blog at some point.

Proc3

The last talk was from @Thricedotted, who spoke about the creation of Twitterbots and offered both a lot of interesting high-level overviews and justifications, but also concrete examples of their own work at creating various bots and the outcomes they produce. A lot of people seem to be very keen on creating Twitterbots as part of ProcJam, and for those of you on Twitter that’s probably something worth keeping an eye on as the week progresses. It was interesting to note the importance of constraints and requirements, and the interplay between the two in ensuring outcomes that are at least vaguely intelligible, and the range between simpler and more complex Twitterbots that use the various kinds of available data out there.

After this we wandered off to a nearby pub, where conversations ranged over roguelikes, those old game helplines where you pay £1/minute for assistance with Mario 64, genre theory and genre definitions, the troubling preponderate of people with doctorates in the ProcJam talks attendee demographics, various upcoming triple-A games, the immense amount of time games like Fallout 4 demand out of one’s existence, the exciting growth of eSports as a cultural moment, what we were all planning on doing for ProcJam (if anything – to those wondering, I’ll just be working on URR as usual), game exploits and balance and fairness, our respective future employment intentions and hopes in the world of games, and various other topics which have probably disappeared from my memory overnight. It was also good to catch up with many other friends from the world of games/PCG, and after a certain point I had to make a move in order to get back to King’s Cross before the last train back. All things considered it was another great event, I highly recommend keeping an eye on the procjam hashtag, and that everyone should try to make it to next year’s talks, wherever they end up. Even though I wasn’t giving a talk this year I bumped into quite a few previously-unmet URR fans, which always warms my heart, so do come along and say hi some time!

Next week we’ll be back to our regularly-scheduled URRpdates, at which point I hope to have worked through most/all of the bugs and minor issues and so on that have built up to a near-critical mass at this point, and need to be resolved to give URR a level of stability before we continue to push forward with NPC coding. See you then!

Important NPCs V

This is now the fifth post in a row about handling the game’s important NPCs who need to be tracked in the abstract even when the player is nowhere nearby, and need to spawn when the player is nearby, and need to move appropriately when the player leaves map grids, enters them, and does anything else. In the last week I’ve coded it so that the game will correctly match up physically-spawned NPCs with their abstract “copies”, making sure that the right NPCs spawn in the right places; towns in nations with the “isolationist” policy now spawn with town walls, whichI think are *really* excellent and I’m very pleased with how they turned out; towns in internationalist nations also now reflect this preference; I’ve enabled the game’s ability to distribute important NPC information to a small number of a larger group of NPCs (if you read on it’ll be apparent what this means); NPC homes are now identified specifically when the player generates the map grid they live on and I’ve ensured that all abstract schedules now work correctly. In all honesty this is more of an “important NPCs and other stuff” update, but nevertheless there has been enough NPC progress to merit continuing the title. So: read on!

Matching Up NPCs

Now when any important NPC spawns, the game correctly matches them up with their abstract version. In some cases this can be slightly more complex than usual – for instance when spawning a priest in a map grid with a whole bunch of priests, it needs to spawn the right priest, or when spawning a merchant in a market district it needs to correctly choose the merchant who sells the particular type of goods in question (who will be stored in the game’s abstract information, so that they can be referenced at any point even if they haven’t yet been spawned). I know I’ve mentioned this several times in past entries, but I think this time it is *actually* full implemented, at last. There are some classes of NPC who do not yet spawn physically and therefore cannot yet be matched up to their abstract counterparts – for instance lords of towns in vassalage nations, or delegates for parliamentary nations (since I haven’t yet worked out where the heck they live!), but the system can be easily expanded to those when the time comes.

Town Walls and Diasporic Communities

In keeping with my plans to ensure that all ideologies have actual physical effects (akin, this is a blog post in its own right, which will probably appear in the next few weeks) I’ve added in the code for placing walls around the towns which exist in isolationist nations. Depending on the aesthetic preference of each nation – the standard square, circle, octagon, diamond, cross I’m going with at the moment – town walls generate according to a slightly different algorithm, and look quite different once constructed. Here are illustrative examples for each shape (square, diamond, octagon, cross, circle). At some point these will likely gain guards at the gates at the outside, either to check who turns up, or perhaps to charge those wishing to enter depending on economic policies…

Walls_Square

Additionally, “Internationalist” civs have the reverse of this, and all of their towns contain what I’m calling diasporic communities. When such a town spawns the game will look for the nearest nation to that town’s nation which the nation actually has diplomatic ties with (so no nations they’re hostile with, and no tribal nations) and will then spawn a few of the houses (and some of the crowd) from that nation instead. Here’s an example of a town which had a community from another feudal nation, but sometimes they might even have a nomadic community living there, which would merit a different brick tile as well as brick colour:

diasp

NewS

(You’ll see some new shapes and things in the latter picture, which are the new “Barracks” and “Military Base” structures for various ideologies, with (of course) an appropriate shape for the nation in question). I am of course fully aware that this two-colour system is not how these things would look in the real world, but again, recognition/visuals/gameplay > realism in this case, since I want it to be very visually apparent that you’re living in a more varied town than normal. As above, all of this is part of the background objective of this release, which is making the world’s nations even more varied by completely reworking the ideology system. More on this later!

Prisoners, Farmers, Monks, and so forth

There is a particular category of NPCs where you have a number of the same kind of NPC in a grid, but only some of them are “important” and therefore need to be tracked. As I’ve mentioned in a previous entry, a jail might have 80 prisoners, but only 3 of them might be particularly important. The game can now distribute the importance to a random three prisoners, whilst also storing the remaining 77 so that the player cannot leave, return, see which prisoners have “respawned” and thereby deduce which matter and which do not.

Jail1

All Abstract Schedules Work

This is a small but crucial point – I’ve now confirmed that all abstract schedules work correctly for all important NPCs, and that when the game starts (now fixed to exactly midday on Jan 1st, 1700) they all start off doing the correct job they should be doing. Whether an NPC moves from tile to tile, or always stays within the same map tile, and whether they are exchanging guard duties, tending to vegetable gardens in monasteries, ruling a nation or shopkeeping, all schedules now (as far as I can tell, and with 2000+ important NPCs per world gen, this is tricky) seem to work perfectly. I haven’t had a crash in a long time, and I can look at the important NPCs sitting on any map grid and they all always appear to be doing the correct thing. It is of course possible there’s a bug hidden in here somewhere, but I’m actually feeling very confident about it now. This is a major step towards next week’s objectives (see below) and it feels really good to have it all functioning correctly. I’ve also worked hard on optimizing the time it takes for abstract NPCs to take their moves, particularly when the player is fast-travelling, though this inevitably takes a bit of time; but since the laptop I program on is ancient and garbage, and players won’t be fast-travelling during gameplay anywhere near as often as I’m doing it in testing, I think a tiny pause per step is acceptable (though I will still continue to improve it).

Home Doors

Now, when the player generates any map grid, the game looks over all the important NPCs stored by the game, notes those which have their homex/homey variables on this map tile, then looks over what kind of door they should be living behind – a standard house, a castle, a church, and so forth – and then finds an appropriate door on that map grid and makes that their home door. For buildings with multiple doors (cathedrals etc) it stores all doors in a list of “home doors” rather than just the one. For some NPC types this hasn’t yet been completely handled – inquisitors, sailors and explorers will probably lack any home tile, I’m not yet sure where exactly certain NPCs will spawn and act (e.g. blacksmiths), and so on – but the overwhelming majority now get a set of door tiles attached to them. This also means that once such doors have been assigned, random crowd NPCs will never go through that door. Again, we continue to build towards next week’s objective (see below) of getting all the important NPCs to always act correctly “in person”, as well as in the “abstract”.

Next Week

My plans for the coming week are to begin work on the most challenging part of all: getting spawned NPCs (i.e. those the player can physically see on their map tile) to act according to their abstract behaviours and schedules. This is a huge one, and it will likely take more than a week for the entire thing, but I hope to have significant progress to show in seven days. I’m also probably going to slowly continue work on things like castles and ideologies in the background, and continuing to add to town variation (I need to get manors spawning for “vassalage” nations, and military bases for “standing army” nations, for example), but ensuring identical behaviour for spawned/unspawned NPCs is the core goal for the next couple of weeks. See you then!

Important NPCs Part IV

Lots of further work on important NPCs (this “Important NPCs” series of blog posts is probably going to hit at least eight or so in total). The major developments this week: the game now assigns nearby home districts to each important NPC, and in turn an actual house when their district is actually spawned; the game now adds in naval trade routes and creates a range of maps for optimizing NPC pathfinding around the world; and NPCs now move around the world map and take an appropriate length of time to make moves! Read on:

Homes are Assigned

Homes are now assigned to all important NPCs, and each NPC has a “work” location and a “home” location (although special events, like a gladiator being pulled away from their training to fight in any one of many possible arenas, will add another “work” location). In some cases these are the same districts – so the guards who guard castles are also guards who live within castles, and their work and home districts are the same, and the same goes for every guard in a one-tile fortress, town, etc – whereas other guards will live elsewhere. There are no homes in a city centre, but the guards who guard the mints or parliaments have to live somewhere, and so they now live in other districts, where the district depends on the NPC (so the guards of mansions are better-off and live in middle-class districts, whilst the guards of arenas will live in lower-class districts, and so forth). When the player then enters a district with homes in for the first time, the game will look over which important NPCs are housed in that district, and will assign actual doors and houses to those NPCs, and ensure that random NPCs in crowds will never enter these houses. Here’s a little output noting which guard in a pairing each guard is (“first guard” or “second guard”, their form of guarding, where they begin the game (whether on duty, or not on duty), and then where they work and where they live; and you’ll notice a range of living districts for the mint guards.

Homes

Ocean Trade Routes

The game now generates ocean trade routes. All settlements except hunter-gatherer encampments which “touch” the coast now count as being a “dock” (even if these do not physically spawn yet, but will soon), and the game now has an algorithm for attempting to piece them together in a reasonably interesting, efficient, and wide-reaching way. The player will be able to jump onto these shipping routes, as will important NPCs who need to travel very long-distance (which will be rare, and mostly for mercenaries, soldiers, ambassadors, diplomats, plotters in various schemes, explorers, inquisitors, preachers, etc). I’m very happy with the kinds of shipping patterns this produces, and is something I’ve been meaning to add for a while, since it connects up parts of the map not ordinarily connected and thereby allows important NPCs to potentially travel to places they couldn’t travel to before (more on this below). These routes will show up on the world map once you find them, and when you consider boarding a ship in 0.9 (probably) onwards, you’ll be told where that lane stops, how long it will take you to each location, how safe from pirates etc each part of the route is, and so forth.

Oceanroutes

Road and Off-Road Pathfinding

When an NPC is looking for a path between settlements, the NPCs consider two possible routes – one using any tile they’re able to use, whether something fast like a road or something slow like an ordinary piece of terrain, and another using only “special” forms of travel, meaning roads, naval trade routes, and (in the future) desert caravans and mountain passes. Whichever one is faster (and safer) will be the one the NPC selects. So in this first picture, we see the terrain of a given world. In the second picture we see “all valid tiles”, and we can see that oceans are excluded aside from shipping routes, deserts are entirely excluded (since caravans do not yet exist), mountains are excluded (since mountain passes do not yet exist) and rivers are excluded, except on tiles where a road crosses them. In the third picture we see the final map which only uses roads and shipping routes, which might take longer paths to a given location but each particular tile will be faster – and so the game will check them both whenever an NPC wants to move. I debated going even further and weighting every single tile and using some kind of A* with Bounded Costs system, but a) that would be a surprising nightmare, b) it’s very CPU-intensive and this multi-settlement pathfinding has to be done effectively instantly, and c) I actually think this can have gameplay value: if you are told Person X is travelling to Y, you can be told if they’re travelling by road, or not, and can try to catch up with them that way, rather than knowing they’re going by the absolute optimal route, which might be very challenging for a human player to deduce.

Terrain

Worldpathfinding

Worldroads

A final interesting note: we can see in both of these pictures that the area in the northwest is cut off from the rest of the world. That area happens to have no towns which are on the coast and therefore have docks, and same goes for cities, and it is separated from the rest of the world by mountains and desert, and cannot therefore be accessed by land (unless the player is willing to move through desert or mountains without caravans/passes, which will cause each turn to take many many times longer than normal; NPCs will not have this option). Therefore a future (but probably quite simple) system will be required to floodfill the world and to ensure that every settlement, no matter how obscure and hard to reach, can always be reached via land, road, shipping route, caravan route, or mountain pass, or some combination – something this particular generation doesn’t achieve.

NPCs Moving Around the World Map

Although this is all snazzy and important, the most important thing by far is that all important NPCs now move around the map on their standard schedules. They will not yet appear and spawn if the player enters the same tile, and they are not yet able to be given one-off tasks (“Come together in Parliament for a vote”, “Go to this arena for a fight”, “Present your latest artistic work in front of the King”, etc), but they all correctly make their way around cities and towns, they perform their actions at the right times, they get up and go to sleep, change watches if they’re guards, tend to vegetable gardens if they’re monks, and so on and so on. Now, naturally making sure that the player can physically see this happening is the next step – and a big one – but at any moment in time I can now check what every single important NPC across the world is doing, or in the process of doing, and when they’re going to stop doing that and start doing something else. There isn’t really a nice picture I can put up for this, but it’s happening, and that’s crucial and very exciting.

Next Week?!

The next two weekends are both free for me to focus entirely on coding (as well as ongoing evenings etc), so I’m hoping for a lot of progress. For next week I’ll be continuing to inch forwards on castle generation, hoping to get guards once more changing over their patrol timings with each other, and start to get all the important NPCs spawning when the player steps onto those tiles and being tracked whether abstract or spawned. That’s quite a lot, so we’ll see how it plays out, but I’m very pleased with my speed of development at the moment, particularly considering how many other professional (and personal) commitments I have at the moment. See you next week!

Important NPCs Part III

Major progress on important NPCs this week! We now have all NPCs correctly linking up with their abstract selves, the game correctly listing and assigning historical and interconnected importance (if any) to all important NPCs before they are actually generated (from slaves to kings), the delegates/representatives for democratic nations being generated and tethered to a home district/town/etc, minor vassalage families are spawning, and early progress has been made towards even the generation of castles! Read on…

Importance of Important NPCs

Firstly, the game now selects a lot of new important things during world generation; or rather, it has always done this and then stored “keywords” and information so that specific areas can be generated later if/when the player sets foot in them, but this has now been expanded to every NPC who might be important. Therefore, the world at generation decides precisely how many servants live in a given mansion, for example, and how many mercenaries live in a mercenary guild in a certain city, and so on. The map I showed last week was partly complete in this regard but was lacking a bunch of other important NPCs I had actually forgotten about, but I believe the game now generates them all correctly. This means all guards are generated at world gen, along with all other obviously-important NPCs (like rulers) and a small number of other NPCs (like slaves, servants, prisoners, etc) who are then intermingled with non-important versions of themselves.

Since new important NPCs have been added, take a look at this new diagram – you’ll see that there’s now a bunch of important NPCs spawning in towns, settlements, more in cities, all over the place! Much more colourful and much more variety, and shows that not everyone who matters lives in a city…

Important_NPCs

Historical Importance and Secret Information

The game can now assign “notes” to each important NPC, notes which might be referenced elsewhere in the game and will determine some of the unique things you might be able to do with each unique NPC. Examples include whether that NPC is involved in a plot, is secretly a worshiper of another religion, has an unsolved crime to their name, fought in a war/wars, is corrupt or embezzling somehow, what other important NPCs they’ve met, where they traveled, and so forth (and also past-tense examples for all those I wrote in the present tense, so an important NPC might have been involved in an un/successful plot in the past, but is not involved in one currently). This will obviously develop far more in 0.9 onwards, but the basic framework is now in place for meeting a merchant in one place, who tells you about a plot he overheard involving someone in the next town over, then finding that person and encouraging them to give you information about the plot, and discovering it is being lead by a number of political delegates who all secretly worship another religion, and then finding out a list of delegates and trying to decipher who it might be, and finding out this plot may be attempting to put a particular person on the throne, a person who – as someone else told you – may just know the location of one of the items you’re seeking…

…and so forth.

Representation and Delegates

I turned back to the democratic ideology choices this week and added a nice bit of extra detail here. There is now a new NPC type, the “delegate”, shown for now with an “a”, and each democratic(ish) nation will have a selection, depending on how many seats there are in their parliament. Once the game knows this number, it then carries out a reasonably complex equation. The game counts up how many towns, monasteries, and districts there in a nation (say, 4, 2, and 18), and then attempts multiples alongside each of those (1,2,3,4) for how many representatives there might be from each town/monastery/district, and then attempts to get that as close to the target delegate value as possible. If it hits it directly: great. If not, then the game gets as close as possible to that value, and then adds in a few extra delegates which belong to the major families, the military, the national bank, the national religion, or some combination, depending on how many “extra” delegates are required. This obviously produces a lot of variety – in some nations each monastery has two delegates, each city district just one, and each major house two; in another maybe each city district has two delegates, but the military fields six of its own delegates, and the bank a couple too. Delegates have been given (temporary and very basic) schedules for me to test in the coming week getting them all moving correctly around the world map. Here’s an example map of nations with the “representation” ideology (in white) and their distribution of delegates, who will all be scheduled to come together to the parliamentary building once every X weeks/months/etc:

Delegates

Road Aesthetics

A minor thing – I noticed that all road curves were curved, and that doesn’t really stick with the whole geometric-aesthetics thing, so road curves now vary, just like almost everything else, depending on the nation they’re found in. A truly minor detail, but once I realized it, I just had to fix it. The octagon and diamond inevitably look similar (the octagon just has less diagonal), but still:

Roadcurves

Early Days for Castles

On evenings when I didn’t have enough time to sit down and really do a lot of this complex scheduling/technical stuff, I started work on castle generation and, although it took a long time to figure out how exactly this was going to work, I’m very pleased with the initial results, and I’ll definitely have something to show in this regard in… two weeks? Something like that. But here’s a little hint of some castle walls, a gate, a moat, and is that… is that something which might become a DRAWBRIDGE?!

Delegates

Vassal Houses

The game now spawns an appropriate selection of lesser houses for nations with the “vassalage” ideology. There’s a longer blog post in the work for the future about how I’m reworking these for 0.8 and the new variation I’m trying to add to all the nations as a result, but that’s a future thing; nevertheless, these now appear, and each is given a town to rule; in the very near future I’ll be expanding this so that a “county” appears around each town which each family rules, and all the farms and whatnot within it, which is the area that vassal then controls. Still not quite sure how the mottoes for these lesser houses will generate, but I’m sure I’ll come up with something acceptable in the near future.

V222

What next?

Well, by the end of next week I hope to get the important NPCs moving and scheduling themselves around the map, even if only in a very basic state, and to have significantly more progress on generating castles, and hopefully to allow you to follow and track important NPCs whether they are”abstract” – i.e. the player hasn’t yet gone close enough to them to pawn them – or “real” – i.e. the player has gone close enough – and these NPCs should carry out their schedules regardless of whether they are on the other side of the world, or directly in front of the player. That’s a pretty big ask, and I’ll be busy for much of next weekend, but I’d hope for the first steps towards it next week. I’m also drafting out in the background a few other improvements to the policies system (which is now becoming “ideologies”, as that is far more descriptive of what I’m after here), extra variation in each nation, and also some thoughts on ambient flora and fauna and making those a) more interesting and b) actually exist, respectively. I’m also now strongly leaning towards saving up both NPCs and conversations for a big release, as DF did that a while ago and it seemed to work out fine, and I know it would be worth the wait… I know I mention this debate every entry at the moment, and I still haven’t 100% decided, but I’m about 95% on the “save it up for an epic first release” side of things. Either way, see you in a week!

Important NPCs Part II

Some Updates

A couple things before we get started this week. You can now watch my talk from the UK IRDC 2015 on URR’s general generation systems. Check them out! Also, I’ll be at this year’s ProcJam opening talks (though not speaking this time) down in London, so you should all come and say hello, both to me and other excellent PCG folk speaking. Hopefully see you there! And if not, I recommend taking part in ProcJam – a lot of awesome stuff came out of it last year and I’m sure the same will be the case this year. Also, as mentioned previously, I’ve now started a job as a three-year research fellow; currently I’m therefore working on URR at weekends and in the evenings. Progress is speeding up again now, but it’ll inevitably be a little slower than it had been pre-move. As such, I’m now seriously once more considering releasing NPCs without the conversation mechanics as 0.8… but I might not. Basically, I’m going to finish NPCs, and then take stock; but that possibility is still on the table. I don’t want people waiting ages, and I do obviously want the NPCs to be tested, but at the same time I promised gameplay and the conversation system is going to be in-depth and exciting, so I want to offer that, even if that means a longer time between releases. We’ll see.

Now, onto this week’s update, where I am pleased to report that development has now resumed after around a fortnight of moving house and starting-new-job admin, and we have some initial progress in the handling of the game’s important NPCs. So, read on…

Placing and Counting NPCs

When a world is generated there is now a block of code which looks over each tile, examines what is in the tile and the ideologies of its owning nation, religion, and all this kind of data, and comes to a conclusion about how many guards there should be, what kinds of guards these are (Mansion, Parliament, Castle, etc), where they should rest (in that same tile, as in a Fortress, or in another city district), and so forth. It does the same for all other important NPCs, and then counts up the total. Here’s a map I had the game print out where each tile was coloured according to how many important NPCs it had. A black/grey tile had none, and then the colours/numbers went through the rainbow to denote numbers of guards from 1 to 10 – dark red, red, red/orange, orange, orange/yellow, yellow, yellow/green, green, light blue, mid blue. If there are 10 or more, it uses a ‘+’ symbol. One can see roughly where all the major cities are, and get some impression of where fortresses are, and for the time being nothing spawns in towns which would “merit” a guard (though this will probably change) and so those don’t show up (same goes for tribal encampments, though I might add guards to certain buildings there in the future). I think it’s quite interesting to note how different cities have different textures of how important NPCs are laid out, depending on their ideologies and so forth. Note also that some of the fortresses have different numbers, again according to their layouts/ideologies. Anyway, here’s an example of this map:

Important_NPCs

And some zoomed-in examples of cities with very different “important NPC textures”, where in most cases the +s are indicative of things like city centers and upper-class districts and military districts, whilst the common 1/2/3/s tend to be lower-class districts where the national ideologies vary what spawns and doesn’t spawn there:

Impotext

As for these important NPCs: they are stored in two areas – if it is an important NPC who will never ever leave the tile they are currently on, it saves them in the potential_npcs list on that map tile; if it is an important NPC who will be moving around the world, it saves them in the potential_npcs list in the world overall; this separation is to avoid a situation where even NPCs who never leave their map grid were in the global set of abstracted-out NPCs, there would be no point scheduling them and going over their routines/actions, since those can just be modeled when the player goes near. At this point it also (though this is not fully implemented yet) creates a bunch of tags for each important NPC. This might be something mundane and overt like “Guards the mansion of Family X”, or something covert like “Intends to murder NPC X in a plot with [list of other NPCs]”, or “Once met a mercenary who knew where [secret item X] was buried”, or whatever, which one might be able to discover. This brings us back to the previous discussion a while ago of secrets NPCs hold: a jail might have 50 prisoners, most of whom might be mundane, but a few will hold secrets which might be of use to you in some way.

Abrand

Spawning Important Folks

Until the player goes near to any of the important NPCs, they remain “abstract”. They are able to act and gain connections by possessing the list of “npc_info” stuff listed above (who they plan to usurp, their other secret agendas, etc), and this also means that a spawned NPC can talk about an unspawned NPC without that NPC having to be spawned, which means that all the important NPC information is set up before the spawning of any of those NPCs. When the physical version is spawned because the player has stepped onto their map tile (or they are a roving important NPC and they have just moved into the player’s map tile), the game looks for the “npc_info” which describes an NPC of that sort and then tethers that npc_info to the physical copy of that NPC and deletes the abstract copy. That then doesn’t change the abilities of other NPCs to reference the important NPC, but it just means they now reference the physical copy rather than the abstract copy, but either way the game knows the information relevant to that NPC, and that NPC can move around the map (whether “physical” or “abstract”).

Abrand

Reworking Guards

When I worked on guards in the past few weeks, I hadn’t fulled realized that guards were, basically, an “important” NPC, and therefore would actually need to be tracked to their homes and the rest of their schedules just like all the others. This means I’ve had to undo a little bit of the code I wrote before for tracking guard pairings and so forth, but this didn’t actually take as long as I’d feared. Guards now still spawn correctly and match up with their “abstract” selves, but no longer exchange their positions, as that requires me to transform some abstract guards into real ones at appropriate moments, and then get them matching up whether or not all, some, or none of them are spawned – the next step is therefore to get them (and everything else) performing according to their schedules, which is the objective for the coming week.

Abrand

Next Week

Important (and unimportant) NPCs remain permanently/temporarily spawned when they cross districts, so you can follow them; guards can exchange their patrols with one another at the correct times; TIME (regular) and SCHEDULE (unique) events work, or at least have begun to be implemented. See you then for more work on the important NPCs of URR!