MORE AI OF COURSE

To anyone who sent me an email about playtesting and I didn’t reply: I’m very sorry! I think I’ve caught them all, but I’ve had a lot, and my inbox has recently been blasted with spam, so it’s possible I missed one. If so, rest assured it was entirely accidental and nobody has been shunned on purpose, and I *massively* appreciate every single offer!

But as for this fortnight’s update: YES, as I’m sure you could guess, I’ve done more work on AI, but my goodness, we’re getting close to an acceptable level of completeness here for the 0.8 release. I just realized with something of a shock how close I am to having this release’s AI finished: Chieftains, Priests, Archivists, Mercenaries, Clerks, Diplomats, Farmers, Guards, ordinary citizens, Innkeeps, Jailers, Merchants, Slaves, Tellers, Servants and Prisoners all work! If I can make sure officers work, and all the NPCs in castles and monasteries work, it’ll be done! Then I’ll do speech generation, then release 0.8, then return to finish off the more obscure NPCs – blacksmiths, delegates, explorers, gladiators, and so forth – in a much quicker 0.9. So here’s a run-down of everything this past two weeks, as I enter what I desperately hope to be the last week of concerted AI work in this release. I will be releasing the playtesting release on the weekend of 2/3 April, and I’m probably going for the closed playtest option. For now, though…

Servants and Slaves, Again

Found a few fascinatingly rare errors involving saving and loading specifically when important but non-unique NPCs were next to, or on, a staircase, and were either transitioning to sleeping or transitioning to doing their normal everyday stuff. If next to the stairs they were trying to find a new target when the game reloaded instead of continuing to the stairs, but if they were already on the stairs, they would cause a soft lock with the NPC trying to find another target. I’m pretty certain I’ve fixed this now for all NPCs this might apply to, and if it isn’t finished, they should roll over to a piece of code that will encourage them towards a chair or a bed for a temporary rest, rather than having them lock up the game, so there’s a slightly less-elegant backup solution in there in case the main solution doesn’t work. I went into the basement of a mansion and waited until it was time for the servants to wake up, quickly modified the code to make them all wake up around the same time instead of over a longer period in order to take a nice gif, and voila:

timetowakeup

Ambassadors

Ambassadors and innkeeps have a similar thing to them – they spawn and sleep on the upper floor of their building, and when they get up, they head downstairs and do their thing, and then return upwards. As far as I can tell (I know I keep putting this proviso on everything I write about AI, but the stuff is so damned complicated that I have to!) ambassadors work correctly, although there remains a tiny issue with innkeeps because in their business day they can sometimes drift onto the upper staircase, and if they decide to go to the upper staircase when already standing on it, they go up but then don’t look for a target, and freeze. Not quite sure why, but for the ambassadors, here’s a quick gif of one turning in for the night:

ambed

Clerks and Diplomats

Clerks and diplomats all now seem to work correctly, using effectively the same code as tellers, albeit with a minor slight difference. They live all over the city, head towards their appropriate embassies, and behave correctly, although there was a really strange issue for a while with the game trying to spawn a duplicate whenever one of them was due to act! Then we had another issue with clerks and diplomats sometimes deciding to sneak upstairs and occupy the ambassador’s bed! Cheeky buggers. All very odd, but now resolved.

Clerktoemb

Monastery Name Generation

To my amusement, I realized I’d neglected to get monastery names generating! I’d just left them with a placeholder, “Monastery of the Six Halos”, and entirely forgotten about them. I returned there this week and spent an hour putting in a robust name generation system which draws upon the specifics of the religion in question – whether it worships an animal god, a demonic god, a lovecraftian god, an “ordinary” god, a pantheon, etc – and then churns out a series of related but distinctive names for the monasteries in each civilization. Here are a few groups of examples:

Monasteries

Archivists again

Archivists weren’t behaving perfectly and couldn’t find their way back to their desk after a good night’s sleep. Now they do!

Mysexychair

Farmers

Farmers now farm! You can head into a farm, and for each farmhouse, we’ll see a farmer doing their thing, which basically involves moving from point to point in the fields, and only moving a few tiles at a time. By this, I mean they select a group of crops to work on, work there for x turns, then move no more than 5 or so tiles in any direction onto another crop, tend that, and so forth, and so you see them slowly moving around their fields. At the appropriate time, they head home. Here’s a gif of a farmer… farming… which is about as exciting as you’d expect, but hey, it works:

Farmoflage

And goes to their farmhouse:

Farmerbed

And going to bed:

bedtimeThrilling stuff!

Innkeeps

Innkeeps are now in the appropriate place in the day, and at night. As above, innkeeps use pretty much the same body of code as ambassadors since they sleep in the building they work, they sleep on a floor above their working floor, and so forth. At the moment they should come down stairs in the morning and tend to the bar. I’m also considering using the graphics for the beer barrels stored in the basement for barrels more generally, and adding those into the generation algorithms for some other buildings to add some variety to the standard chairs/tables (i.e. use them as food storage barrels and that kind of thing). For now, people do still come into the tavern when the innkeep is asleep, but that can be fixed some other time, and definitely fits into the “long set of very minor issues” category that I’ll handle in the future. I assume they just sit around and drink their drinks very slowly until dawn once more spins around.

inbed

Next Week

The final AI update before the playtesting release, and hopefully pretty much all the AI needed for 0.8… and what a relief that will be!

AlphaGo, Lee Sedol, and Grand AI Challenges

This week the first four matches of Go pitting AlphaGo – the Google-developed “Deep Mind” Go-playing artificial intelligence – against Lee Sedol, currently considered by many to be the best Go player alive, have taken place. In the first match, AlphaGo emerged successful, shocking many, and had a number of interesting moments of play where Sedol tried moves he didn’t think the AI would be able to respond to, and later a particular move was made by AlphaGo that Sedol felt almost no human professional would ever play. The second match was also an AlphaGo victory, although it took longer to force Sedol to resignation than the first, and through-out, the commentators noted the “creative” and “unusual” nature of some of AlphaGo’s moves. In the third match, AlphaGo was once more successful – this means that it has won the series, and the implicit question of the series has shifted from “can AlphaGo win a single match?” towards “Can Sedol win a single match?”. In the fourth match, Sedol struck back – with AlphaGo making an apparently dubious move, and Sedol making a superb move, around the middle of the game – and made the series 3-1, with one more game to go. Having looked over all the commentary of the games – and I post this after match 4, with one still to play – I think there were a lot of interesting issues raised by these matches (or rather, the commentary around the matches) that needed assessing from a slightly more critical angle. AI is obviously a crucial topic in game development – and one that, long-term readers will know, is currently proving to be a complete nightmare in my own game development – and the discussion around these matches is surprisingly intriguing, and I think very relevant to understanding how we think about game AI, and what kinds of traits we’re looking for in a “good” game AI. We’ll be back to regular game development updates next week with another big step forward in finishing off the game’s AI (and I will be releasing the playtesting version on the weekend of the 26th/27th), but this week we will instead take a closer look at how these matches are being written about, thought about, and presented to the public.

From https://gogameguru.com/go-commentary-deepmind-alphago-vs-fan-hui-game-5/

From https://gogameguru.com/go-commentary-deepmind-alphago-vs-fan-hui-game-5/

Until very recently board games tended to dominate discussions of game-playing AI ability, and for years Chess was used as the absolute metric of AI ability. Once Deep Blue and subsequent chess-playing computers emerged clearly dominant over their human opponents, the idea of a “grand AI challenge” seemed to fade somewhat. Research in AI naturally takes place in a thousand different subfields, but research into other challenging games played globally at a professional level – poker and Go being apparently the dominant two – continued, but without quite the same public interest. As time went by, the greatest game AI challenge came to be considered an AI that could skilfully play Go – the game’s possibility space is far greater than that of chess, of course, and many suggested that an AI capable of beating the top human player(s) was most likely decades away in the future. For whatever reason, the poker-playing AI seems to have captured the imagination less – is it because it’s a game of incomplete information and therefore seen as “less skilled”? Is it because to the unskilled player it appears to be a game of luck? It is because it takes longer for the better player to emerge victorious? Is it because to the unskilled player there is simply less to visually look at than Go or Chess? It may be any one or several of these factors, but whatever the reason, the game of poker – which of course requires psychological and social, as well as mathematical, insight – was pushed aside in favour of an AI that can play Go well, which in game theoretic terms is essentially the same challenge as playing Chess, but just more so. Significantly moreso, actually: the classic quoted statistic is that there are more valid positions in Go than there are atoms in the universe, which outstrips the mathematical complexity of Chess by quite a margin.

Deep_Blue

From Wikipedia

I’d like to think about one particular question here: within the space of game AI developments (whether or not we accept the tacit claim that these are indicative of wider questions about AI and the overall ability of AI), are playing Chess and Go really the two greatest gameplaying achievements we can think about? I’m reminded of Demis Hassabis’ comment at the start of the competition that “the only game left after Chess is Go”. Firstly, it (and all the other discourses surrounding this match, I’m not singling Hassabis out here – he just happened to make an explicit comment that serves as good jumping-off point) is clearly oriented, at least in part, towards the broader reader. Everybody has heard of Chess, even if they don’t play it; fewer people (in the West, anyway) have heard of Go, and by positioning the two together like this as many media outlets have been doing in explaining the history of game AI, it feeds into popular assumptions about the difficulty of Chess. By positioning Go as even more difficult than Chess (the game many people consider to be hugely complex), the average person who knows nothing about Chess, Go, AI, or games per se, is immediately given an idea of the apparent scope of this achievement. I understand (of course) that conveying the noteworthiness of complex academic, technical or intellectual pursuits can be tricky, but this kind of statement and the wealth of associated commentary surrounding the matches that mentions Deep Blue vs Kasparov discursively positions game AI within an incredibly narrow space. The Nature paper reporting on AlphaGo does briefly acknowledge that Go may be the greatest challenge in “classic games” rather than all games per se, but that one comment aside, I can find little reference to games conceived more broadly than classic games of the Chess and Go variety. In both cases we are not actually talking about “games” as a massive sweeping category, but instead we are talking about board games, with extremely simple foundational rules, no particular requirement for rapid input or reflexes, and that take place with complete information. They don’t need their AI to read information from a rapidly-changing computer screen, or to deal with a far more complex set of rules and units (the “rules” and number of variables in Starcraft, for example, are vastly more detailed and numerous than Chess, and even more so than Go), or to rapidly or near-instantly respond to in-game actions and changes (a fairly generous timer tends to be used for Chess/Go AI matches), or extrapolate about incomplete information as in a card game or real-time strategy game featuring a fog of war. This isn’t even to mention other factors in the massive swath of human cultural items we call “games”, such as solving riddles, engaging socially with other human players or AI actors, exploring unknown virtual spaces, and so forth.

alphagonature

From http://venturebeat.com/2016/01/27/googles-ai-beats-a-professional-go-player-an-industry-first/

As many readers of this blog are likely aware, it was only a few months ago that an AI beat NetHack for the first time. Now, naturally I’m not suggesting that quite the same level of research and funding goes into beating NetHack as went into beating Go, but there are nevertheless a range of other frontiers of game AI design that aren’t “solved”, and solving procedurally-generated games and games with short-term randomness certain fall within that category. Even if we accept that AlphaGo’s victories demonstrate the absolute domination of AI calculation over human decision-making in simple-rule, large possibility space, complete information, no-time-pressure games, that’s only the slightest sliver of what games are at the moment. This lack of broader applicability is also very clear when we look at something like poker, which shifts and changes as the metagame changes. For most forms of poker I don’t think there exists a perfect and stable Nash equilibrium of gameplay when the “skill” (or not) of one’s gameplay choices is so heavily dependent upon the dominant metagame. In ~2010 the hyper-aggressive metagame meant that five-betting preflop with A5o was considered (by some) to be a strong and legitimate strategy, having been pioneered to great success primarily by young European players. By the time I quit playing professionally, I would say this particular metagame was approaching its demise, and although I don’t really keep up with the game now, I’m aware through comments from other professionals that this rather bizarre metagame has entirely faded. A poker AI needs to create models of its opponents’ playstyles, and ideally an even broader model of the overall poker metagame at the time; there are rarely moves as “obviously” strong or weak as in deterministic, complete-information games. Recently an AI that plays heads-up Limit Hold’em “perfectly” was announced, a very impressive achievement, although a very small subset of poker with a substantially reduced possibility space compared to No-Limit Hold’em Six-Max, or Seven-Card Stud No Qualifier, for example, and a particular niche of poker that is heavily mathematical, minimally psychological, and with very little variation in the metagame over time. Simply “playing the numbers” will not, in any poker game more complex than heads-up Limit Hold’Em, be sufficient, but such an approach is entirely adequate to games that share game theoretic characteristics with Chess and Go (and Shogi, Draughts, Othello, etc), which – as we’ll note – tend to be physical, historical games. When it comes to the generally far more complex computer games, AI struggles, and yet we define Go as the ultimate achievement in game-playing AI? We ultimately have to conclude that this is a very narrow sense of the word AI, and one rooted deeply in deterministic game theory rather than the far broader range of concerns that necessitate “skilled play” in contemporary games.

From http://poker.srv.ualberta.ca/preflop

From http://poker.srv.ualberta.ca/preflop

As hinted at above, there is also an additional cultural component here in how we regard board games and computer games. I’m sure we’re all aware of the struggle for games to be considered “high culture” – in the eyes of the average non-game-player, games are probably somewhere below television and above comic books, which is to say relegated to the absolute cultural dreck of the world. We know this to be a nonsense, of course, and I can honestly say a large volume of the most profound experiences I’ve ever had with any form of artistic media came from games, but there’s no doubt that games have it bad. Or, rather, that computer games have it bad. Few would doubt that an old, venerable and respected game like Chess or Go wasn’t a form of high culture, whereas I think few non-game-players would immediately recognize the cultural value of most computer games. If you’re looking for wider validation for the value of your AI to the non-specialist audience, where better to look than a slow, steady, refined, physical game that is thousands of years old, rather than one of these seemingly crass, transient, new-fangled, high-speed digital-game-thingies? Similarly, on a visual level, I think someone who knows nothing about Go can still reasonably take a guess at the complexity of that game simply by looking at the board and thinking briefly about the possibility space of each decision, whereas someone who knows nothing about your average fairly challenging computer game will be harder-pressed to “read” the game and see where the complexity and challenge lies. For all of these reasons I’m concerned that in the wake of these matches we may, to some extent, wind up foreclosing on public interest in other forms of game AI in public debate if the problem is believed to be solved, when in reality even the most modern games with eight-figure budgets ship with AI actors that are far removed in their abilities from even a moderately-competent human counterpart.

From Amazon.com

From Amazon.com

The victories of AlphaGo are certainly a massive achievement, but the point I’ve tried to argue here is that they are a massive achievement in a very particular sliver of the immense world of game AI, and that we should be very wary of, and think critically about, the kind of spectacular commentary being thrown around. Sure, we can build an AI to defeat the world’s most skilled player at Go, but unless I’ve missed something we don’t yet have AIs that have human-standard conversations in games, or can solve riddles and puzzles in “adventure” games, or can navigate their way across unexpected terrain with the trivial ease of a human being, handle any game thrown at it (the goal of “general game-playing AI”), defeat a top human player at Starcraft 2, or – maybe most compellingly to me – defeat top players at any one of the more complex and involved varieties of poker. Equally, I naturally understand that if one wants to get published in Nature, one will have to present one’s achievements as the most impressive or transformative thing developed in the field in question for years. And it is, indeed, hugely impressive. However, the world of “games” back when Chess AI was first programmed simply no longer exists. Far from classic physical board games being the ultimate challenge of game AI, they are now only a single subset of gameplaying AI, and one that handles none of the unpredictability, nor social or psychological engagement, required of so many modern games. Let’s treat AlphaGo’s successes as what they are – a tremendous victory for AI in the game of Go specifically, and in deterministic complete information games more generally – and not as the harbinger of perfect game AI, nor the inability of humans to ever compete with AI players, and certainly not as the highest achievement game AI could ever aspire towards.

AI, for the Umpteenth Time

IRDC

This year’s US IRDC has now been booked, and will be at NYU from August 6th to the 7th! Unlike last year where various tedious things got in the way, this year I will 100% be dragging myself across the ocean for this, and staying at least until late on the 8th, and possibly a little longer depending on Various Factors. If I’m going across the Atlantic for it, those of you already in North America have no excuse! I hope to see a lot of URR fans there – for more information, you can check out the information here on Roguebasin. If you want a European IRDC – and naturally, I do too – then you should pester DarkGod, who volunteered to host it but has since gone mysteriously quiet…

This Week:

Well, in one sentence, even more NPCs now (as far as I can tell) schedule correctly. Here’s a run down!

Guards (again)

Yep, guards needed still more work. Found a bug where if you entered the house of a guard, even if they were actually meant to be in another building, so long as that building was a) in the same district and b) currently unspawned (e.g. an arena, whose guards always spawn in the same lower class district). This has been fixed. Also discovered a bug during testing that sometimes under very specific conditions actually duplicated an NPC – if an NPC went into a building, and you saw them go in (so they had been physically spawned), but the building had not yet been spawned, and you waited until they completed their initial task, and then entered (and thereby spawned) the building, they would appear in the building and behave correctly, but a doppelganger would be made and stored back into the list of abstract NPCs. Then, when it came time for that NPC to take another scheduled action, both the abstract non-existent NPC, and the physically spawned NPC, would both try to take the action (since they shared the same unique identifying number), at which point… Bad Things would happen. This has been dealt with. I know last week I said everything with guards was working, but now I *really* think everything with guards is working. Hopefully.

Prisoners

Due to a classic case of chaos theory, making a totally minor change that was essential to the game’s code for handling important NPCs had the unexpected side-effect of causing only the tiniest fraction of prisoners to ever actually spawn – only the secretly-important prisoners in jails were spawning, whilst the other prisoners who are classed by the game as “important”, i.e. they are saved and still appear when you change map grid, were not being spawned. This has been fixed! Here’s a jail full of prisoners (the “z” characters) wandering about their cells:

Newjail

And the jailer knows how to go to bed, though I slightly messed up this gif by going up the wrong staircase first and letting the mouse cursor stray in at the end…

Tosleep

And when I go back in at night, they’re all on their beds like good prisoners, and the jailer is where they should be in their quarters:

Beds

Jailer

Mercenaries

There was an earlier bug with mercenaries, and although I didn’t explicitly fix it, something I’ve coded in the interim seems to have fixed it, so I’m assuming it now all works perfectly. Hooray! Mercenaries are found in mercenary guilds, and spend their day wandering/pacing their rooms. In the future, of course, you’ll be able to engage with them, but that’s where they stand for now. Here’s a mercenary guild I entered at night, and sure enough found everyone in their appropriate beds:

Merc

And one waking up and starting to wander and pace:

Awakening

Servants and Slaves

I… think servants/slaves in upper-class houses are now working correctly. The important ones spawn and behave, the unimportant ones spawn and behave, and so forth. Here’s me running around the upper floor in a non-slaving nation (so “v” is servant, “s” is slave) and watching the servants going around their day – though in fairness, we’re in a equatorial region here, so both skin tones and wood colours tend to be darker, and combined with the brown/red in the floor patterns here, I admit that the servants are a little tricky to see! But there isn’t really much I can do about that, as it’s a rare occurence to have all three of those match up. Though this might finally galvanize me towards actually adding a 14×14 font size soon, that should help in situations like this!

Servantes

And in another mansion, at night, all the servants are sleeping in their quarters!

Sleeping

However, there is some remaining weird issue going on – if we’re physically present when they should be waking up, they don’t! This is the top priority to fix this coming week.

Bugs and Whatnot

Found a weird bug this week when a guard who had left their house and was going towards the arena to relieve the other guard there somehow got switched from the “Local Pathfinding” state (where they move from one point to another on the local map by any means necessary, regardless of roads) to the “Roadmap” state (where random crowd NPCs just follow roads). This should be totally impossible, and having gone over the code many times I cannot find how this could take place, and sadly I had no debugging stuff going to catch that happening since I’ve been doing AI for three months now and this is the first time that’s ever happened. Weird. I’ve put in even more safeguards into the code to prevent this happening, but I suppose there’s got to be a tiny chance that whatever weird collection of flukes led to this occurrence could still be lurking out there. Very peculiar.

Also discovered an issue with the way I was actually playtesting things; due to things now being saved in their own subfolders in the save folder instead of being saved in one massive file, saving/loading is vastly faster and more efficient, but it does mean it’s harder for me to “reset” the game to its previous state to continue testing the same thing in fractionally different scenarios. So I wrote in a bit of stability code to basically help me testing; this probably won’t be noticed, but it just makes saving and loading things in the background a little slicker.

Dialects

I’ve continued to take brief breaks from all this madness to work a little bit on the dialect generation system. I’ve identified a massive set of variables including word order and various other things, and it’s looking amazing even at this early stage. In my brief moments of dialect generation, I am coming to realize that before I go much further, I need a very clear and solid idea of what “a conversation” will actually look like. More on this in a near-future blog entry…

What next?

We are approaching a point where there is only so much I can do to try every possible scenario that I can imagine, and I’ll just need to release a playtesting build and rely on the skills of the masses (you wonderful lot!) to help me find it all. Still debating whether to do a closed or open playtest. Leaning slightly towards open right now, but I was leaning towards closed last week, so I’m very changeable at the moment on this point. I’ll update you all once I have more information. For now, though, my focus this week is on ambassadors, clerks, diplomats, innkeeps, delegates, and finishing that issue with slaves/servants.

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!