[Music] gentleman ECG shotgun let's welcome them thanks so when dave told us that he wanted us to come up and speak for 16 minutes about procedurally generated shotguns i didn't really think we'd have enough time to fill all the content and so we're gonna go each person is going to talk about different types of shotguns and how to procedurally generate them so i hope you guys all know what you were prepared for when you came here and you know take lots of notes so I'm gonna introduce our first speaker me too and the tubes gonna take it from there go for it hi everyone uh so um where are my slides are they here hello yeah okay cool hi okay so um hi I'm Mitty and so I do a few things I make games as the tiniest shark I'm a member of faculty at the NYU game center
I'm also chief creative officer at Spirit AI so this is actually the second of three talks I'm giving in the just the AI summit this year so some of you may have seen my talk yesterday on reactive storytelling through agent driven design and I'm gonna talk about some of the work that I've been involved with lately sort of touching on some elements of that so apologies for you saw that talk but also I'm also doing other work kind of at the opposite end of that spectrum so and I've been thinking about this as a spectrum actually so this idea of agent driven stories versus story driven agents so there are quite a few of us on this panel talking about various kinds of procedural generation of characters and so I think part of the reason I'm going first is to frame that work with some definitions and some tips for sort of working at both ends of that spectrum so firstly sort of why should we even tell those kinds of sort of procedural character based narratives the boring but true answer is replayability
longevity etc the more interesting answer is that I think all procedural stims are kind of driven by a philosophy right it's an opportunity to discover a certain knowledge space and there's lots of opportunity for very thoughtful very nuanced stories to be told so procedural narratives can allow us to explore and unpack the philosophy of an entire story space rather than just one story of course um so let's go ahead and start with some definitions um so what I'm calling agent driven stories are those which are based around simulating the interactions of lots of lots of agents which can sort of tell us something about that particular world through having the player sort of interact with them etc and the way that stories are told in that particular world is through a mechanism of noticing really so that's kind of the mechanic sort of noticing how agents are set up in opposition to each other which ones are different from the others and why those particular properties might matter
in the context of that particular world so agent rivet stories rely on lots of agents the storytelling comes from noticing so these agents are supposed to be moving they're not animating for some reason but that's fine let's imagine all these agents moving and they're all moving differently so I want to talk about some prop gen considerations given those sort of psychological strains right the sort of mechanics of noticing on the other hand there are there are also what I'd call story driven agents so those agents would have been crafted to know a lot about a particular story space the way that you learn about the story space is by interacting with that particular agent through some kind of dialogue or even some other set of interactions which act upon that particular agent can my animations are not working imagine one of those agents is like super huge all of a sudden because that's the agent that you're really interrogating okay so that's kind of the spectrum of types of character AI so those of you saw my talk yesterday on telling
reactive stories in an agent driven world I sort of talked about what I'm doing that's sort of this syndrome at this end of the spectrum the agent driven stories end of the spectrum as the tiniest shark which is a when where I'm working on a game which is called little invasion tales civil invasion tales is a small city building and citizen management game all about defending your citizens from alien attacks I've also previously worked on the game called red shirt which was a kind of Bleakley Machiavellian social networking simulator so and that world was really set up through the mechanics of noticing right so noticing that characters behave differently because you know we don't I think we don't really understand people right like nobody really does like we don't have a complete model of human behavior and the best we can do is Express a particular point of view so the limits that we impose on a sort of system that we create are expressive they have something to say and we need to be
cognizant about what we're actually saying we need to be conscientiously reductive when we're designing character based games so for example in red shirt the space created was kind of about using people as pawns and so a lot of the attributes that characters had kind were kind of you know in that sort of negative space that they had things like vanity for coolness bigotry etc like that's like the world and that was those the attributes which set up characters in opposition to each other then on this side of the spectrum at spirit AI we're building tools in middleware to help people write story driven agents so M short just gave talk in the narrative summit more about what we're doing so I'm not going to go into it but we basically made an sdk and a set of tools for helping you create characters which are more deeply expressive one particular demo we have is about interacting with a robot who you're interrogating and the system is able to sort of improvise off scripted dialogue that you've defined for it and it has an
agenda so it uses sort of a space of knowledge like a knowledge space that it has about its own world and uses that to let you interact with it so I think that those types of - sort of procedural character based narratives affect writers and designers in different ways so I think that one of the opportunities we have is to sort of bring writers more into the fold of sort of you know creating these sort of story driven agents so with story driven age the shift moves more towards writers so and one of the real things I want to sort of impress is how do we as humans for making character AI or just in general as humans how do we find out more about each other and our agendas like you know as real humans generally we do it by talking to each other right we sort of ask each other things we converse about our opinions even when that's difficult in recent times especially so language is super
important to humans and with little invasion tales I've tried combining instances of language into an agent driven story which is basically the talk I gave yesterday one of the missions that I'm trying to accomplish with this invasion Tales is bringing sort of a wider audience into the fold of understanding procedural narrative and kind of what happens like the fact that we sort of look at agents interacting and we have like an implicit narrative that arises out of noticing those interactions but actually making that explicit through text and voiceover so using language to help us notice and so also relate to that point so this is you know I've already touched on how red-shirt worked and also procedural characters sort of need to be expressive about their world so again in full invasion tales they're expressive about that their particular world through talking to each other so the system in
in little invasion tales for passing knowledge between characters is one that's inspired by the system in left for dead so it's basically like a query system and and characters can share knowledge between each other but also I'd be able to sort of trigger all kinds of actions as well but also I want to point to besides language what are some other solutions particularly if you're sort of at the end of the spectrum where you're making agent driven stories so one of my go-to solutions to try and hit that sweet spot which I've enacted across both redshirt and little invasion tales is letting the player just see the process of character creation like using character to help us notice right letting the player fiddle with sort of sliders and variables so that they can understand what the underlying model is so character creation is a form of communication this is the character
creation creator from little invasion tales so the last thing I want to say is that I'm really interested in what we can come up with when we bring both sides of the spectrum together what kinds of procedural character driven narratives might be possible then right so again my animations are not working but let's just imagine these floating and becoming one and other things that the animation is supposed to do so so yeah imagining what would happen if we had a system where we had lots of agents sort of interacting in the world sort of you know interacting with each other according to the underlying social model but then you could interrogate some of them right so you'd have a few of them which you could interrogate more deeply and find out actually you know what is their agenda within this world so using the mechanics of noticing and using the mechanics of language so yes there we go so the little agent which is
supposed to be animating is saying see how I act in relation to my world talk to me about what my agenda might really be so that's it so that's my sort of set of definitions you can see what we're doing at spirit on the sort of language based interaction in North Hall from tomorrow thank you [Applause] hello everyone I'm Tanya short and I'm going to give you some tips for maximizing the impact of your generated personalities I actually hadn't heard Metis talk before just now but I think you'll see some interesting parallels so yeah if you are generating personalities in your game you're first going to need to pick a reasoning a motivation and then a behavior which is what a character does and why they do it so now you have a generated personality
congratulations but is it an interesting personality does the player understand what that personality is are the connections between the reasoning and the behavior actually satisfying to discover that's the goal normally we would assume that reasoning drives behavior because that's how we experience our world not only does science actually have a few factoids and studies that disprove that but you might want to consider the opposite for your game and moon hunters for example the players behavior such as being nice to everyone was then measured and determined what personality trait was assigned to them such as compassionate sort of retro actively explaining their behavior through their motivation and from the player perspective they can encounter each of them or both simultaneously depending on how you frame it even if your engine is starting with reasoning and then going into behavior it might make sense for the player to see it the opposite see it at
the same time because to understand the simulation the player has to understand both the cause and the effect even if a given action is both a cause and an effect in human authored media it's common to start with the behavior and never show the reasoning it's common to advise show don't tell which means displaying a behavior and allowing the audience to interpret the personality according to their own internal lens this is more natural this is how we encounter real people in real life getting to know someone is about interpreting their behavior or their reasoning from their behavior but most procedural personality games up until now have gone the other way they tend to tell the audience about their personality traits and their reasoning and then later on display the behavior at which point it's the players game plates you notice and in and interpret whether or not what the algorithm is actually doing with that reasoning and the advantage of this approach is that
AI systems become core to the gameplay noticing is the gameplay of understanding the systems and this is great when you're worried that maybe your behavior will seem rather random because now the players have built their own model of reasoning however that can result in in a lot of information for the player many procedural personality systems such as our beloved Dwarf Fortress and games I have worked out as well tend to expose a lot and as our audiences become more accustomed to procedural content maybe we won't need to expose as much to convince them it's random it's not random but part of the problem is that compared to other procedural content procedural personalities are very subtle because in real life even personalities are very subtle they are abstract they are invisible they're fourth dimensional they take place over time and even if you lean on well-known archetypes people will still need to pay attention to see
the pattern you can't rely on instinct the way you can with physical attributes like hair colour or height or gender I was stunned when I joined the Age of Conan a system design team because I had played the game for a month and after playing for a month I joined the team and I looked at their scripting engine and I found a beautiful modular elegant version of a Maslow vien hierarchy of needs for these monsters that I had been slaying and observed no such thing every single character first would seek safety and then seek shelter and then seek food and companionship and self-actualization yes even though the internal design teams motto was combat combat combat and correspondingly most of the players just killed everything but the real problem here was that there was no way as a player I would expect that to be the case and there was no sign to contrary there was no reason for me to expect that reasoning was going on
there was no communication so they had this beautiful system which I used a lot for designing boss fights and things but this living breathing world aspiration kind of took them into this wasteful use of energy for years developing a system that didn't need to be there so if you do hide information about your personality systems it can really help to be obvious about it as in civics which came out recently you can see some coy hints about what's hidden when something's hidden it's very obvious this encourages further experimentation and exploration by intriguing the player and that's part of why we're being really upfront about hidden Villager personalities in the shrouded Isle which is a game coming up published by a Kitfox games the discovery of those personality traits becomes a player goal which is then very satisfying to are intrinsically satisfying to discover as if you're getting to know someone in real life so in addition to not hiding your whole systems you might want to
look at what kinds of personalities you're generating because in games like Crusader Kings 2 or others more extreme personalities are easier to notice when you have subtle traits like irritable not only is it harder to see but it's also harder for the character to express through your various gameplay systems for example Roth it's easy to imagine what a Roth person might do on a battlefield or in political negotiations but irritable does that really have a meaningful gameplay impact probably not and finally when you pick traits even if you're going extreme extreme passivity might still be hard to see you might notice that in the sins it's not just that shyness for example makes someone avoid conversation avoidance is just really hard to see so instead having specific behaviors for each extreme is important even in real life of course when people are shy they don't actually cover their face and maybe withdraw
awkwardly from every conversation but if you don't do that it just looks like a lack of behavior rather than an active behavior arguably the most successful personality type in king of Dragon Pass was the trickster archetype and I believe that that's because they clearly stood out among an otherwise reasonable panel of people they were the one that really caught your eye when you were playing in short it's a risk to hide almost everything in personality procedural personalities because there's no good reason for players to assume that there's any complexity there of course if you go too far in the extreme everything becomes a bit silly but even if you don't get silly players might still be laughing because well it's natural authored characters have the advantage of immediately reading as human all gameplay systems and authored games tend to support the notion that this character's personality is natural and its expressive whereas in a procedural game you tend to have overtly
intellectual gameplay you tend to be having system driven gameplay in which the players are actively exploring the logic not leaning back and submissively under suspending their disbelief and becoming immersed your characters are symbols of people in this kind of gameplay they're not real people and they're not even like authored people exploring procedural systems and the chaos of simulations is kind of the opposite of immersion I mean even if you do achieve immersion and portray drama the player has to internalize all of your systems in order to reach that point where they can look past all the numbers and the spectrums and whatever and see humanity which takes time and during that time chaos and surprise is almost guaranteed in system driven worlds which makes comedy even easier so when you're designing your player experience just keep in mind that things will be a little bit funny anyway third
tip for maximising your impact of procedural personalities is if the same event produces two contrasting reactions and characters it's much more economical you can learn much faster about both characters then if you're relying on each of them act independently so in this example if a character dies and one character laughs and the other one cries you're learning something about both of them without needing to set two different contexts and in fact as in redshirt you can more quickly process a whole crowd of reactions if you have a crowd of 10 people imagine trying to keep track of each of those 10 each doing their own separate activity versus five of them crying and five of them laughing which tells you not only about each one but also their relationship to each other and finally I recommend changing your procedural personalities over time rather than setting them static at the beginning because people change that's natural they change for so many different reasons that players will justify almost any transformation we've
told them enough kinds of stories we're used to seeing people get stronger over adversity or weaker in adversity or getting stranger so as long as the player is given a before a trigger and an after it's probably enough fuel for them to build their own pattern of why the change happened and what it means to them I just want to take a moment to note that when I reached out to David Dunham a designer of King of Dragon Pass he actually explicitly warned that these risks can be overcome and it's true there have been procedural personalities that have been subtle and dramatic and they're great but the reason I give these risks is not that they're bad it's that we want to engage with these risks intentionally rather than discover them halfway through production so I recommend being careful with your subtlety and otherwise maximizing the impact of your procedural personalities thank you
okay um so I'm Tarn Adams the co-creator of Dwarf Fortress with my brother and I'm going to talk about I mean I was invited on an AI procedural generation panel and I came up with the most naive thing you could do I have AI is making his stuff so this is this is a discussion about that so here we have just naively we have procedural generation you have some sort of algorithm it's going to make something you have an input you have a random number generator and rarely in practice doesn't actually turn out that way right we massage our results we add a lot of algorithms they give you you you can put your sort of personal touch into it and it can get out of control sometimes you have to throw things away but in the end you have a lot of levers once you've made your final sort of algorithm when you're thinking about generating any any type of content and it's great to have all of those levers available because
when you have an AI making something you can just swap in personality traits for your initial state you can bias your random number generation with with these traits to sort of restrict the output into what what could be created by this agent you can you can think in isolation of an agent creating things as as just a restriction of a general algorithm although in in practice you'll find that they they're they do much more so what am I talking about here making anything really I mean you could have simple crafted items you could think of like Diablo type stuff or furniture visual artwork and you don't need to actually generate very good assets but anything really location maps stories you could think of AI behavior itself as being a result of a procedural generation algorithm if you want to be reductive about it but really anything anything you want in this talk and they they think about the knowledge of the world
what what what things have happened what what sort of locations there are also their relationships to people you can you can put anything at all their their personal beliefs in into these objects they create but I mean coming from an or fortress you might think I'm talking about like generate your whole world and then you can make a game - or whatever right it's it's that's not not what I'm saying here with with events these could be handcrafted this could just be one small generator that exists in a completely handcrafted game you just have to systematize things so specifically with events what I'm talking about things that happened those it could be things that the player does we're talking about in play a generation after all and we have the AI agents running around doing things but you can take your you know if you have an IP or something or just some backstory that you've written you know you have your your books and video logs and so forth but along with those you can create a skeleton just a skeleton of what happened in a systematic way homogenous with these player events so
that they can all relate to each other you can use the same functions to to generate objects that that tie the player events in with backstory events and so forth and you can systematize larger groupings if you want to reduce something down to just say the biography of this person even though it contains many events so more importantly I guess for things like emergent narrative you can also take your outputs and turn them into inputs you can think about things that other people have made your agents can think about things that the player made they can think about their own stuff they can think about other people's stuff and so let's do some examples so simple example is the players elected mayor of a city you know this is this is any any game where that can happen someone could make a statue you know a commemorative statue it's a very simple AI thing you'd you'd need to say that the AI doing this of course this is their profession or something that I want to make statues but they know that this event happened they created it or they could just try and systemize something is systematized something a little more personal to them
like their belief in the value of friendship they could write a book about it that doesn't mean like generating the text of the book or anything they just create this in-game object that stores data you this is the kind of the what the biggest takeaway of the talk is the more data you store in your objects the more little gears you have to bump against each other to make a merchant narrative so you actually store the data inside the and then it can be used people like most naively you could create copies of objects people to understand that they're making a copy of a sort of this statue of the player if they're just making knockoffs for some reason or they could be reviewing the book they can talk about it they can think about who is the author of this book because that's stored in the book they can think about what do I think of the value of friendship what do I think of the writing style because those things are stored in in the book object and it also allows you to do exposition if you have data in the objects that your your your agents have made then you can speak to other events that have happened it's
sort of a a way to indirectly propagate information by scattering things around the world it's it's difficult to get the player to suck in this data stream right if there's so many things going on its the exposition problem kind of both of the previous speakers have have gone into a little bit and this is just carrying a little data in your objects lets you do that it also lets you have reactions to the objects that make the world seem more alive so if someone doesn't like the player they can see that the players related that object they don't need to care about this mayor thing but just the fact that that that piece of data is in there allows a reaction and the same thing if you if you don't like the value of friendship you could burn all the books and hunt down the author but more subtly you could just learn the basic existence of that event so you can propagate knowledge through these indirect objects and you can also change people's minds
this is it's kind of the the sort of I don't know if it's the holy grail of personality but it's like Tonya said changes gold making things that actually seem like a character arc where someone would pick up this book and learn the value of friendship finally it could be something that happens I mean the dwarf fortress we have people propagating books around and sort of pushing philosophy is one way or another just like this so for the last the last bit here we have the game there's the game you're player has done things in order right I mean it's it's simple you have these events they're systematized their location what the player did if there was someone else involved we also store reasons and circumstances to the extent that we know them at all so that people can think a little more deeply about the game objects and as I said before you
can have your historical objects stored the same way this is not necessarily a procedural history but just if you're doing some kind of comic book game and you have 20 back issues you could make a systematized version of them and be able to refer back to them and and have sort of content emerge from that the same goes with future events can be stored the same way so you could have some kind of psychic prediction or prophecy that's supposed to be met and then when when the AI crafters come along thinking about these things they can start to do stuff that's almost literary right at this point I mean it's not it's not going to be high art or anything but you can start to draw allusions to past events and you can start to use literary tools like substituting say the player whatever happened there to the poor red thing that didn't seem to make it to the end of the game in event B it could be something similar that happened in history and then when someone makes a
statue they could sub-sub out the antagonist with the antagonist from the past but show the player the player defeating the antagonist from the past and then the exposition they'd kind of either explain what they did or at least at least what they were getting at so the players not you know doesn't have to guess that these things have these value they can just be told about them unless I mean they're there's there's something to be said for not telling them everything but in any case we have finally you can introduce your conceptual objects into this this sort of thinking so in endure fortress we have say 40 intellectual values that people have in different sort of degrees numerically and you could give the basic events like this say this reconciliation that maybe happened at the end here could have friendship tag with that simple event
just a simple table of events linked to conceptual types and that's I mean it's basically a symbol right so we have this book of friendship then doesn't need to have text it could just have a simple set of friendship related events that the person wrote about the player and they just need to describe them somewhere say that the player was involved and somehow involved the the in the in the exposition say that the symbol of friendship was involved and that's an allegory right so you can you can do any sort of artistic literary type you can think of can be involved with fairly simple systems I mean it's not there's not too many objects here but you just kind of what it says on the tin when you go to Wikipedia I can read about allegory right there's some just simple concepts that you link together to produce these things and you don't have to produce the text right I mean
that's that's the that's the the thing you just need to produce a district the description allow the person to say what's going on and then allow people to react to it and be changed so this book of friendship might actually describe events of this these fictional events that the players didn't actually do and then someone could come up to you and thank you for teaching them about the value of friendship and you wouldn't know what was going on until you found the book so [Applause] right who here likes math it's about to get really gritty so buckle up my name is Zack Aikman I'm the technical director at 17-bit if you haven't heard of us 17-bit is a medium-sized indie studio based in kyoto japan with a satellite office in Seattle our first game was a turn-based strategy game called skulls of the Shogun but more recently be released a 2d space shooter called galaxy on PlayStation 4 and PC and right now we're working on adapting the game into a mobile version to be
released later this year as lead engineer on galaxy I was responsible for developing a number of different systems but the one that I had the most fun with and the one that I'm gonna be talking about today was the system for generating procedural levels we made the decision halfway through development to switch from handcrafted dungeons to procedural content it's but more of an emphasis on the parts of the game that really shined namely combat and so just help with this talk in context here's a top-down view of the level in galaxies early prototyping days all the rocks camera boundaries the Decorah of objects enemy squads all that stuff was hand placed and we realized that this was not going to be a feasible approach for generating a lot of content with a team of our size and in this animated gif of how levels were being built procedurally near the end of the project explaining everything that goes into this would be pretty exhaustive talk not one that we have time for today but I want to touch on some of the main points and the takeaways that we learn from them I'm gonna go out on a limb and assume that most of you are somewhat familiar or at least vaguely familiar with cellular
automata popularized popularized by Conway's Game of Life using a simple set of rules that gets iteratively applied to each cell based on the state of its neighbors you can generate incredibly complex self-sustaining patterns here we see two examples of cellular automata a one very simple and one very complex but with the right rule sets early automata can also be used to generate very organic-looking cave-like structures as soon as I saw this image I knew that cellular automata we're gonna be used in galaxies done generation in some form but obviously there's more to building levels than just generating geometry a cavern of this size would pose serious problems when it comes to placing points of interest and guiding the player through the level so instead we opted to use cellular automata to generate chunks of a level and then stitch those together into a contiguous path this first animation shows a room sized automata being refined from its initial seed into the cave like structure over the course of several iterations and the second animation shows how we were able to control the spaciousness of a room by
simply seeding the starting pattern with more or less living cells so in the end we wound up using southern automata patterns as a basis for rim creation the generated rooms were then overlaid with additional layers of metadata using a custom tool that we built designers can place spawn points a squad patrol routes deco and lighting data etc to be applied to the cavern after it was generated and initially we tried storing the seeds for the automaton generating the caverns at runtime it seemed like the most cost-effective way of storing a whole lot of room data with just a handful of seed values but thus turned out to be an inefficient and unnecessary step what we gained in storage space we lost in processing time because it can be kind of expensive to run you know ten iterations in every single room on a grid that's you know 64 by 64 it really starts to add up so a better approach was to instead store a run length encoding version of the generated pattern run length encoding is especially efficient at storing exactly these types of images which have little
to no variation in the interior of the cell so once we had these cavern cells we still needed a way to stitch them together into a cohesive level and we knew that we wanted levels to occupy a certain amount of rectangular space in the game and we also had a fixed cell size that worked well for the amount of content that we were trying to place inside of each room and furthermore the cellular automata chunks had been engineered to accommodate orthogonal exits for north east south and west and we didn't want to deal with diagonal exits or some sort of hexagonal connections between cells so we experimented with a number of different approaches for building level layouts within a fixed region including BSP trees minimum spanning trees and other well known algorithms that you know you'll use a lot in proc gen stuff but nothing really seemed to fit with our unique constraints so I attempted a slightly less Orthodox solution that doesn't exist in the proc gen toolkit my co-worker had suggested z-order curves as a potential solution for connecting the interior rooms of a January dungeon and zero curves are functions that map multi-dimensional data to one
dimension while preserving the locality of those data points so as you trace through that curve all the rooms that it it connects are near by each other but you can sort of walk the path using a single index instead of worrying about two-dimensional coordinates but they're also recursive as you can see in this image the higher-order curves are composed of lower order curves which makes some scalable to grids of any size zero curves were two Jaggi for our use but being clued into their existence led me to find another kind of space-filling curve that was much more amenable to our constraint of connecting rooms orthogonal e hilbert curves maintained the mapping of 2d to 1d space that we were after but do so orthogonal ii allowing us to connect rooms with north south east and west exits so imagining that we want to fill a four by four by four grid with dungeon cells this is a hilbert curve that could be used the H value represents the distance along the path starting in the top left and ending at the top right and then that can be used to control things like difficulty ramps the probability of finding treasure within a room you can increase that probability as the H value goes up
all sorts of things like that and the math for converting Hilbert curve indices into 2d coordinates is extremely simple and pretty fast which means that you can use them interchangeably very easily but the most glaring problem with this approach is that all hilbert curves look the same even if you rotate the curve players are going to pick up on the pattern after just a blue after just a few playthroughs so our solution to the problem was to generate a higher-order hilbert curve than was actually needed and then use a sampling kernel of the desired size so by sliding this kernel around and sampling the path you can get different layouts from the more complex Hilbert curve this really couldn't have worked out better for us it was kind of the perfect approach that we stumbled upon the higher-order curves contain more detail and thus more variety and if you rotate the curve you can get even more combinations at paths so using Hilbert curves was a non-traditional approach that worked out better than we expected I'd never even heard of Hillary curves being used in game development before and it was really gratifying to try to implement a technique that I'd never seen used elsewhere and have it actually work and
I've talked about Herbert curves in other settings like TDC which has led to two other games utilizing them for their own level building needs and seeing someone else implement your algorithm is not only really rewarding as a developer but it also leads to incremental improvements which you can then pull back into your own project hilbert curves are definitely not a perfect solution nor are they even a good solution for most games but they fit our needs really well so I'm going to shift a little bit from level generation to talk about how we made the enemy units in galaxy feel more alive this is funding someone to touch on something that needs image under her talk serendipitously I guess so frequently during combat enemies will fire off little quips and exclamations things like I see him when they spot the player or help I'm under attack if they need backup and we call these interjections barks but getting these barks to sound organic and non repetitive was a really interesting challenge one that we solved by looking to valves left 4 dead series so a long ruskin that valve gave a fantastic presentation at GDC 2012 about the contextual dialogue system that they
built for left 4 dead series I'm not going to rehash the entire talk but I will I can't recommend it highly enough it's a really interesting really detailed and very easy to follow explanation of how they laid out their dialogue system but the gist of the approach is that your engine maintains a global state of world facts that are constantly updated as the game state changes facts are really nothing more than key value pairs that track things like how many enemies have been killed or how long is the session been active additionally and many other local states are stored containing facts unique to a particular entity in your game for the player this might include things like how many bullets are left or how much damage has been taken and your writers will then author all dialogue triggers as piles of rules or queries and these rules can be as specific or as generic as you'd like for example if the level has been active for more than 5 minutes and the player has less than 5 health and an upgrade item is nearby then play the dialogue line just in time and the contextual system will always try to find the query with the most number of rules matched which allows you to write
dialogue that's as specific or as generic as you need it to be along goes into much more detail in his talk on how to best store these facts and rules and how to optimize your query functions and other interesting topics like that that really matter about the implementation so again I'd encourage you to check out his talk or his slides if you're interested in those details but despite the versatility of this approach our implementation suffered from the few problems that I wish we had better about addressing and I'm hoping I can pass on some of those lessons to you one is that the sheer number of rules and facts that you can generate can lead to an overwhelming amount of content I think and left 4 dead 2 they said they had 10,000 lines of dialogue which is no small amount of content to manage and for a large team with the dedicated rider who's regularly working in your tools and is really involved in the project that may not be an issue but for a small team like us it was more of a burden than it was worth we also need to we also neglected to write an adequate system for bug testing rural queries many of those queries can grow to be really complex and if you don't have a system in place that allows you to
easily manipulate the world or entity fact state tables it becomes a really tedious process to try and track down Aaron lines of dialogue and this was the one that hurt us the worst I think we had a really bad content pipeline due to the way that certain game data in galaxy was edited and stored we had barks defined in both Excel spreadsheets in Google Drive spreadsheets and rebuilding the Bark's data consisted of downloading the Google Drive spreadsheets and running an Access database merge on multiple sheets to make matters worse the merge was handled by unity tool which relied on a certain access plugin that only ran in the 32-bit version of unity and certain versions of access and it was an extremely brittle pipeline that could have broken at any point in time when we upgraded unity or access thankfully it did not and we made it through the project but it's not something that I would do again thank you for listening that's it for me for any questions shoot me an e-mail or after the panel can grab me thanks
cool hey everybody my name is Lewis cruel I'm a senior technical artists over at side effects we make a software call Houdini and this is a pet project of mine that I'm gonna be sharing a little bit so I was in game development for about ten years before joining software development and I still have that itch to make games so this is my kind of little love child so this talk is about me and then I have a little bit of content from Antonio Lee a piece that is over at University of Malta and I'm gonna talk a little bit about how we met and basically how that relationship evolved so what we have is a little project that I came up with where I want to procedurally generated first-person shooter at triple-a quality and this is part of my other talk later today on the AI crackpot so you can see how weird and off-ball it is but this is the kind of first steps towards that and I wanted to show kind of where we are in the process and I think we're gonna get really close to the realization so we have a small team we want to be building triple-a content
and we want to basically have as much procedural ISM and as humanly possible and it needs to be a multiplayer competitive fps and we worked in like the team everybody has kind of that frame of mind and that experience so that's why if we're gonna put procedural ism into some game that's the kind of that's our Jam so it's like that's our muscle memory and that's what we know how to do so the way I like to think about procedural ISM and the eyes like in that card we have procedural ISM as this little black box of inputs that basically the artist will drive and they'll kind of draw a little volumes and everything but if you shove a eye into that now we basically have something that can just pump out content really really really fast so that's why we want to get to so I started to think about this project and then I went to a conference there's like a ton of academics and they're all talking about procedurally generated and all these cool ideas and I was like let me just shoot a blind email out into the ether and then see what shakes out so I basically shout out to procedurally generated Google Groups and it's like
hey man we're in this project anyone interested in helping me out this is what I'm kind of going for and then Antonio's actually came back and he was like hey I have this think this ancient sketchbook and we can just make maps and then it's a web-based API and then it basically just starts by randomly placing nodes around and then continuously evolving based on constraints and all of that is kind of data-driven and it works really well so I started kind of playing with it a little bit and seeing what how far I could get to it and so here's a little bit of the the kind of process to where you have like the random initial seed and then you kind of start evolving based on rules and constraints that I define as an artist the Web API had a little bit of less what then what we needed so he was just super nice and was like tell me what you need because I was like he kind of craved that actual Triple A side of things and he was like I want to see this academic stuff being used in context and I wanted to use academics so we kind of met in the middle and he actually started giving me kind of custom executables that I could use and we made some modifications so the first one is ability to have second
floors to our maps which is kind of something unique in for procedural content generation we gave us something I'm gonna talk a little bit about later which is like further evaluation of the data so I can tell where choke points are where dead ends are where cross signs are and then being able to lock down the entrances which is really crucial for me and I'm gonna talk a little bit about that later and then just being able to like procedural systems tend to and he talked a little bit about it where you just the walls kind of creep in and we'll try to fill up as much space as possible and it's very maze-like so that's the opposite of what you want on a first-person shooter you want these big nice open areas that you can kind of run around and kind of connect together so he basically added another constraint which is I can control the degree of how many walls get placed so the output data that I get from the system is askew so much like the dwarf fortress stuff so basically we have a little text that is II use for entrances I get basically stairs or jump ads in my case and then spawn points weapons I can specify a lot of things on
basically where I want things to spawn and how how many of each I get so that's basically I have a little Java wrapper I have a Python wrapper - a Java executable that just have a bunch of parameters I could have created ideally we can kind of triple-eight this up and then make more rules and kind of build this out and then basically I can just make as many maps as I want to and yeah the addition output data is I have the original map and then he can also as well with the maps I can get that choke point that ends in crossroads I'm not using this currently but for like as you people want to kind of start using this this is super kind of crucial data that you might be able to use so making sense of the data so first like the vascular fizz really hard to read so first I wanted to translate the ASCII data into 3d so I just kind of built a grid and then I just color-coded it so I could see what the hell's going on so now I can see the entrances of everywhere and then the Blues is where the jump pads are gonna be so we can go from 1up map to the other one and then the rads is where the weapons are going
to spawn and then the greens are we're gonna be the spawn points but then I can make really cool single rooms but then you get to the point again that's like how do you stitch this together and then the traditional methods again fell short because they're really built for dungeons to where you can I have the spidery vein of things growing and we talked about like adding teleporters to the end of the rooms to kind of connect it together to try to get a flow but we real ended is actually just let the designers come up with the top-down map and it takes them like five minutes to build it and then they can just explicitly say where the entrances of each rooms are what sizes they are how it all connects together and then I can take each of those individual rooms and then run through the system so it's kind of a backwards approach to procedural content generation which is actually working out really well for us so traditionally people will pre make the rooms itself and then kind of procedurally stitch them together we're doing the opposite to where we're pre making the kind of high level flow of the map and how where we want the rooms to be how we want the exits to go and then the inside content it doesn't really matter for us it's like that that's where the the flavor is gonna come in so the way it works is I take
that top-down map I bring it in to Houdini I just parse the data and then I can isolate where the exits are I can kind of get a little bit of a height variation I can calculate the dimensions and know where all the door placements are I can then run that through the generator that I can then get as many variations as I need then now they're all color coded I get the rooms back and then I just kind of do some basic extrusions and then isolate the the rooms I boolean them together and then I actually place the game objects and these are the results so right now we're at the kind of white stage map and we're kind of taking production as we would in a regular game developments of course you have like a white box and then we're gonna start writing out the whole thing is going to be procedural but we wanted these safety spots to just kind of reality check where we are and be like okay does this feel fun before going all the way just like you would in a regular game just does the system work before I kind of make all terrain and everything procedural and everything looks beautiful is it is the game fun so we actually got to the point now that it's
actually pretty fun to play and you can kind of get it an unreal and we had some BOTS in there and it actually feels like a real game which is something that I'm super excited about and actually the designer that I'm working with you at first he was kind of like yeah okay procedural like I want complete control and now after seeing this stuff he's like okay I can see with the force from the tree and I think this is possible and I think we can do this so I'll be again at 1 p.m. I'm going to talk about the kind of massive vision of what this project could be but I just wanted to share the kind of interim step of where I am and yeah it's all I got so I'm gonna go deep dive on a very small topic so everything that is procedural is pseudo and I'm gonna talk a little bit about how pseudo-random generation you need to treat it as your friend and not your enemy so everyone show hands everyone knows what pseudo-random generation is right so
here's the question raise your hand if you've used an actual random number generator actual random not pseudo on the hands shrink so the thing about computers is we can't actually make true random generation we have to use pseudo but you can use pseudo to your advantage you can create experiences that use the pseudo nature of random generation to ensure that these experiences that people get that have some sort of random entity and it can be reused reutilized and kind of taken advantage of as your players and designers so I don't know if you guys have recently heard in 2014 there was a group of Russian hackers who went on to a whole group of these nova mattock casino machines and they were able to record data of those machines watch them play multiple rounds and through doing so they could actually figure out what the current seed was and know when the next big win was going to be so there's this current big rush of like casino companies all over the world getting rid of all these old machines because their pseudo-random generators were just too pseudo and not random enough in games we don't really care so much about that I mean if someone can
figure out potentially what a seed is if they could reverse engineer hey this is a seed that causes this interesting experience that can be a positive thing for a player it's something where they can intentionally choose a seed or kind of direct the seed generation to make something interesting and experience for them so I would guess probably many people in many situations they use the wonderful trick of setting your OS time as your random seed can I see a show of hands of who has done that yeah okay so that's the quick easy dirty trick it ensures that it's somewhat random and you're not going to get the same seed and that's great for something if you just need a quick dirty random result but there's a lot of times when you actually want to do a random seed that has value for the player can be reutilized or the player can choose which seed they want so there's a couple different options here one of the most common is let the user input a seed so this is something like Dwarf Fortress like Minecraft put in a number put in String I convert it to a number and that's the seed we use this is great because it allows you to share it with someone else hey you know check out seed PCG shotgun on minecraft I was gonna
share a photo that and it's actually a really boring start spot so like sorry but the idea is like you can take a really cool hey you know put in my name and see what happens and let's run around in that world and becomes a shareable random experience because you can recreate that exact random generator and pass it on to someone else also if you do this you don't actually have to tell them about their input you don't have to say hey I'm a share a seed write it in and this is what it is I'd love to see some games and I don't know if there's any examples of this so please find me afterwards where you actually use something like the character creation to determine the random seed so someone puts in their profile name that becomes the seed generator it's the same thing as I just showed with the minecraft seeds overthrow fortress except you're not implicitly or explicitly saying to them hey this is your random seed what makes this really interesting is it essentially creates a cheat code base for your player base that they can discover as they play like yo I just found that if you put in the name Yossarian it creates this really
awesome level and like it's this very special space and the first room has like the best gun in the game it creates this really interesting conversation among your players because they're looking for seeds and they're trying to discover seeds through this input system that are really interesting I'd also love to see within this like loading screens you have a lot of now we can do interactive loading screens again without being sued so do something interactive with your loading screen and take that input and make it become a random seed generator for any Content that you have coming after that loading scene you can also take a sieve and break it into its sub elements so if you have this 12 digit number you can take that 12 digit number and each number can actually be a specific chunk to place into like a level map so like Lewis's example each one of those rooms could be like okay we're using room format one room format - and you actually take the seed number and switch it out like that what's really nice about that is then you can treat your seed as a flexible number or flexible string so rather than it just being this big long number that you don't do anything with you can make small adjustments to it you can take
this switch two of the digits you still have the general layout that's been defined again using like lewis's example of like a hand generated flow but now you have two different formats have changed and then within the external elements of each of these rooms you still have a lot of individual things that are using this seed to decide you know what items drop what characters are there so you can get some bit of consistency across the full experience but then have small shifts to the random generation without completely regenerating the whole system now and also this is quite popular as taking seeds from many values a lot of games such as no man sky you're generating a Galactic space you know a whole galaxy in order to do that you need a lot of seeds and the best way to do that is to take XYZ data take your x AQI take your Z you concatenate them together that's a unique random seed that will only be available for that item so when you generate a planet you generate a star you can use location data you can use color data some one color picks or you
know it's randomly generated colors you use the RGB data to create a seed through those multiple pieces you can also use a user ID so many of us if you're developing anything from mobile developing anything for PC I'm possibly with console I'm not sure how but if you can get a specific user data ID something that's unique to the user you can then use that as a random seed create something where there's a random random data for them that is actually not random for them it becomes a static experience for that specific player so this is again like a UDID a mac address any type of information that you can pull that's unique to that player assign that as a random seed and that actually becomes a seed that's no longer random for them so if they have a first-level that's generated they always get that same first level but they're the only one who ever gets that first level no one else will experience that level or that space of that specific combination of random generation because it's locked to them and that brings me to my last
point is the idea of a lifetime seed so we've all experienced random generation we've all played games with random generation every time you play a game every time you go through that replay it's a new random experience but using something like the user ID seed or a lock seed to each individual player ensures that even though we have random randomness across each of our experiences those experiences are unique to us and we will always experience those same results this again will create a wonderful community involvement where I can talk about my experience I can talk about hey you know the purple potion and this roguelike always kills me you say the purple potion always gives you health but it always gives you health every time you replay you don't have to drink that potion and wonder what it's going to do this time it is specific to you I'd love to see games do this with map generation with character generation with anything with a procedural system because then you create consistency across the replays across those experiences and it gives the community an opportunity to kind of talk about their specific seed or kind
of their specific space that they have and they get to feel ownership to it it's unique to them they know that that one random dwarf or that one random character in red shirt always shows up for them every time but no one else gets that character so it gives them more authorship and more ownership to the random generation instead of feeling like full random craziness and that's it for me so thank you everyone so we have three minutes we're gonna do a little fun activity here each one of us is going to go through and kind of talk about a game that we absolutely love but would love to see have more procedural generation does anyone want to volunteer to start I would love to see a procedural layer of any kind added to princess maker - I always wanted to see devious with procedural levels because it has like the weird little
eagle you find on the ground like a little bit through there and you're like what is this doing there but it would be more like a cultural exploration of a randomized civilization that I guess you're also blowing up at the same time which is gonna have said I'm really big fan of music games so Reds would be my top choice like Reza has some procedural elements to it it's like with it's more music generative reactive and generative but like more you know procedural instruments or synthesizers or patterns and things like that like I think it's rich for that that kind of thing I'd love to see a game like Oregon Trail have procedurally generated characters or personalities like a start from here get to here long travel experience but with actual more personality that's procedurally generated I'd love to see Megaman being then procedurally to where the weapons are particularly generated on the bosses and then the levels are procedurally generated as well so I'm good she's slightly and I'm gonna point to a game that I'd love to sort of bring together those sides of the spectrum that I that I defined right like so like a version
of papers please where you have these like procedurally generated characters coming up to you and then obviously you're looking at their documentation etc but then you can interrogate them further and find out more about their sort of motivations there and and have I can imagine that being a game where sort of you know the the context of the world is set up through noticing the differences between the different characters but going deeper on that so I think that'd be awesome and that does it for us for time I guess some of us will be in the wrap-up room and Dave will save some words thank you guys [Applause]
Auto-generated captions from YouTube — names and numbers may be misheard.
Distilling the key insights…
Game Developers Conference · 2026
GameMakers · 2026
Comments