Procedural Level Design in Eldritch

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
all right I think I'm going to get started now before we begin the usual reminders till you silence your cell phones and they're doing the PS scanning thing oh wow they're doing the PS gaming thing so between each session make sure that you could get your PS scan so that when you do your evaluations you get one for each of the sessions in the talk so all right hi thank you for being here I'm David Pittman I'm going to be talking about procedural double generation today and I'm just very briefly going to introduce myself it's my first time speaking here at level design in a day and my background is a little bit different I was not a level designer before I used to work in big-budget games especially at 2k Marin where I was an AI programmer on Bioshock 2 and for a time I was the lead AI programmer on the eventually became the bureau XCOM declassified I kind of got burned on that game and about two years ago I had the opportunity to do something new I co-founded minor-key games with my twin brother and now I do a little bit of everything I do programming design they add art audio business and marketing pretty much anything that has to happen to shift the game I do it now so about two years ago I made this game called eldritch and when I was working on it I actually had a kind of difficult time explaining to friends and family why I was making it wasn't like a particularly innovative game is just a hybrid of genres the people didn't really visualize the way that I was thinking of it it was kind of hard to describe I tended to talk about it in terms of my influences in immersive simulations and roguelikes but what I was really trying to say is if you take first-person combat and they eject and stealth and you mix it with procedural levels and permanent player dust and dress it up and Lovecraftian fiction and make it on a shoestring budget you get something that looks like eldritch so my nursing games is a two-person company it's myself from my twin brother Kyle we actually work on individual projects though I made Aldrich completely by myself in a span of slightly less than eight months which I don't track hours I think that's silly especially for independent developers but back of the envelope calculation puts that around 1,500 person hours of work to make this game that number didn't mean a lot to me so I thought that like what would it be for like a conservative big-budget game that would be maybe 100 people working for two years and not crunching that would be like four hundred Dale's in person hours so this is like a fraction of a percent of the work of a large game and I'm not saying I like to brag like the game has a ton of rough edges but it's just I had a very fast there are a very short time span to make this game and I had to work very fast and so that's going to be something that comes up throughout this talk is trying to find the simplest thing that could possibly work and that was actually why I chose to do procedural level generation for this game despite the the kind of rushed development of Eldridge it was fairly well received I've cherry-picked the radians I show here because it's my talk and I can do that but you know mine out in people who wrote a review on scheme like to the game so that was pretty cool and it made a Tim told return on investment which was also really nice and it didn't do that by selling like millions of units or millions of dollars like it was not that successful but the development was so lenient it was fairly easy to recoup the cost so I want to talk about specifically you why I was trying to accomplish with the levels in eldritch but first I want to talk about why why I used procedural level design for this game and why anyone might use it so the first reason is probably most familiar is if the game calls for like an element of perennial discovery the way the roguelike games do every time that you play a roguelike or some strategy games like civilization uses randomized maps to great effect the player can't go into the game knowing what that levels going to look like they can learn the systems but they can't learn the space and so the game design in that case actually dictates that you need a generator so that the levels are different every time project constraints are another big one and I think this is the reason that there's you know kind of the current vogue roguelikes feeling amongst independent developers myself included when so as an individual developer I didn't have time in eight months to make even like five to six hours of gameplay if I were building the maps by hand I was trying to do everything else to make enemy I build the physics for the game like I wrote my own engine for this game it was I just want it had time to do levels if you're familiar with the like the project management triangle of cost time and scope wear it as one of these things changes the other to have to push a ball to accommodate it like as an individual developer cost and time are the same thing like this triangle basically flattens into a line between how much money do I have and how big is the scope of the game going to be I had to keep the scope of the game small because I was going to run out money I couldn't continue to do that full-time job sorry another reason to consider procedural level design is if it's you know placed here team strength my background also as a programmer I was able to get very fast at developing procedural levels I had done this sort of thing just as a hobby before and so when I went to make this game it was natural for me to want to do this whereas if I were trying to make levels by hand I'm not an experienced level designer I would have been kind of fumbling it I would have been much slower about it procedural levels also kind of enable content reuse in a really good way everything I made for this game kind of just ended up in the mix to where if I if I built a module I made some new art like it just ended up showing up everywhere in the game you would see it regularly you would play you know the structure of a roguelike is such that you die you play a level over and over you know there a variation on the same level and so you saw all the content in eldritch a lot there wasn't the kind of in in big-budget games especially there's a lot of money spent on set-piece things that you might only see one time in ten or twelve hours of play there's multiple ways to use procedural level generation the the one that we're familiar with the one that I use for Eldridge is generating levels at runtime but you could also generate levels offline and then work on them I you know like I can mention this is a good way to as an indie developer create a game that's a bigger scope than what it looks like your team could support like generate a large terrain randomly and then filling like key points of interest by hand you could do some types a at you and you don't also have to make a whole game that's based on random levels you could supplement like a ten-hour campaign that's built by hand and then if the player wants to do more after that like there's an endless amount of generated levels so they could play after that I actually don't know of any games I've done that this seems like a really cool thing the last point I want to make is that procedural level generation is design I think there's a tendency to regard it as the domain of engineering but I can imagine kind of like a hypothetical programmer who doesn't have any design sensibility that person couldn't write a good algorithm to generate levels because they don't know how to evaluate the output of the system like you have to know what's a good level in a way it's almost like you know if you're a lead level designer you may not be the one building levels but you have to be able to tell the rest of your team you know here's what the levels for this game are going to feel I can be able to recognize if something isn't fitting what the game needs that's kind of the same thing about working on procedural levels is is that the excuse me fighting cold you need to be able to develop a set of rules that will produce good levels by knowing how to by knowing what a good level is and that's why I think this is important to talk about at level design in a day is because you know this is a room for people who have internalized what is a good level you have expert knowledge you are used to building levels you know I'm kind of fumbling around in the dark like I'm not an experienced level designer but I hope to share you know what I learned along the way and show he how I did you know take some design sensibility and shape what what I made was Eldridge so the specific goals I had four levels in Eldridge I was not trying to create like the sprawling random terrain of something like Minecraft I want to do compact novels that had a clear start a clear end they took two to five minutes to go through I want the spaces to look I put handcrafted on the slide that section out good word I wanted them to be synthetic worlds look like they were constructed I wanted to have ancient sunken cities and not just like terrain and cave systems I couldn't use noise I had to do things that were hand-built you know I want the effect to be of continuous space instead of room to room there's a few other contemporary first-person roguelikes on the market they tend to be more like every you know shooters to get locked into a room you fight monsters the door opens you move to the next room and that's great like I really enjoy a lot those games but that wasn't why I was trying to make with the Eldridge and the last gold I had here was I wanted the world to be semi coherent which is a kind of strange goal normally you would want world to be coherent you want like a kind of internal logic and consistency but I was I was looking at Lovecraft reference I was reading love stories and that was sort of the inspiration for the world and one of these things that comes up in the lock is rising she describes environments in detail but there's a kind of sense of alien wrongness to the world he describes this is from called Cthulhu he talked to his dreams and a strangely poetic fashion making me feel with terrible vividness damp cyclopean city of slimy green stones whose geometry she oddly said was all wrong it's a recurring element in Lovecraft and one of the things I mean sometimes it takes the form like non Euclidean geometry and actually like three-dimensional space kind of being on the warts in a way that our minds can't comprehend in eldritch I wasn't interested in doing that sort of thing I want the idea that the worlds are not logical not consist and something's wrong about them and that's something that I don't actually think I was very successful yet but I wanted to put out there I mean that's kind what do you see is about talkback or mistakes as well I was also looked at art reference things that were specifically based on low crafts writing as well as you know just pieces of art I've seen and think you know what this is giovanni battista apparently Jerry Williams it looks like a video game environment right and the stuff like that was getting from the art references like I want to have the right angles you know big cyclopean masonry really complex layouts likely if you look at criteria like you see these staircases you've got catwalks you've got people all over the place but the connectivity of the space isn't really clear at first glance that's kind of what I wanted I want justice of verticality that's not common in first-person shooters and that ended up kind of coming back to bite me later I'll talk that ahead and I mean it's not about the structure in the layout specifically if I wanted to use live in fog it's really a sense of a atmosphere that makes these relatively small levels feel bigger than they are and the results in the best case are something like this we've got like if you know what you're looking for here you can kind of see the edges we've got on the right side of the screen we've got like green grass and then there's a kind of clear divide into a module that's made out stone but it's continuous space it's not room to room we've got things that look familiar we've got ladders we've got sconces with life but it's only semi coherent like we've got a ladder that goes up to a stone can't walk it's not really clear what that's for that was kind of what the best I could do in the times I had for that sense of alien wrongness I don't think it was successful but these are the kind of levels that we get from Eldridge so to give you an overview of how the levels were generated there's kind of three three steps we start by building three dimensional may it's just kind of in the abstract and I'm visualizing here in two dimensions because that's way easier to put on a slide but if you imagine you've got a box it's sliced up along every axis evenly or like if you ever had like the clear plastic may use toys so you have to get ball bearing through you can visualize it like that so we build the maze and it defines the high-level structure of a level but it doesn't have any geometry it doesn't have any environment art then we populate it with a modular kit of rooms and this is the sort of thing that you might even be doing as a level designer now if you have like you know modular and wiring in art and you can stamp pieces together it's basically exactly the same concept and then we generate entities enemies and items I just want to give credit where it's due also this is not like a particularly revolutionary yeah I was inspired in large part by the spelunky generator the so Derek you who made spelunky has written a outed but darius cause a me kind of separately the implemented the whole game in javascript i believe and has made like an interactive version of spelunky generator so you can play what's on the website is really cool like check hi average good chance so the first step we have to generate this menus and you might wonder why we start with amazed because like if i'm playing a game and i say it was really cool it had some good things some bad things i played this one bubble and it was kind of maze like do you think I meant that that was a good level or not like maze has connotations that they out I probably meant that that was you know difficult to navigate I wasn't sure where I was going baby I got lost maybe all look the same like mazes to me you say I don't know where I was going and the the environment was all kind of homogenius so why would I start with a maze then if there are those negative connotations well for a roguelike game not knowing where you're going that's actually a good thing that's part of the central mechanic of a roguelike is there isn't like explicit wayfinding like there's not a designer who's trying to guide the players to the exit part of a roguelike is you have to find the exit so that fire was just okay with and I actually wanted to have really twisty confusing novels because it did come back to that kind of Lovecraft dnalien wrongness if you have like a confusing level and you get lost in it that's actually kind of cool that's part of the the Lovecraft experience but why didn't want was the idea that the environments are all very homogeneous like every part of a level looks like every other part that is not a good experience that that helps you get lost if you don't have visual landmarks and things that make each moment of the level memorable so what the structure of a maze but not the visual sameness of a maze so there's a lot ways that you can generate mazes I think the extensive research that I did was to go to the Wikipedia page from a generation and take the first thing that looked like I could use it I ended up with something called prims algorithm smells like to it I ended up with something called prims algorithm which the steps are described there but we're just going to go through it visually basically you start with the maze and it's all closed off to begin with basically it's a bunch of rooms they have walls between them and they're all we call them closed and then we're going to pick one at random we're going to start in the lower left we're going to say all right that's the first room in our open stat of the maze and then we just randomly expand to any neighbor of that cell so maybe we go up from there then on the next step we're going to pick randomly from the open rooms and expand to any closed neighbor of that so we go that way and we keep doing this and keep growing until either we've done enough passes that we're happy with the maze or even chily we fill all the space so if we if we consider like the structure of this maze like it's it's a decent way that it looks balanced like a maze should be and as much as the maze can have balance but there's no loot in it that's kind of a property of the algorithm like because we open a path from a open node to a closed node we can never join to open nodes together and create loops there's also no open space in it and those are things that I ended up trying to find ways to fix so I made a few modifications to prims algorithm there's two random factors in in print algorithm there's randomly pick a node to expand from and manually pick the note that you're going to expand to so I biased which node I'm picking to expand from based on trying to expand from the most recent visited room if I crank that knob up this is a this wasn't like a competent I do it all the time this is a controlled I here to try to differentiate worlds if I turn that knob up basically I get like the generator kind just expands through the space until it terminates in the dead end or it has nowhere left to go and if you get long twisty may users that end up being kind of claustrophobic to explore they don't have a lot of branches in them if I turn that knob back down I get branches from anywhere in the maze and it's more open space lots of junctions less twisty claustrophobic spaces so the other random factor is which room were expanding to and I biased that toward expanding on the horizontal plane because remember we're doing this bays in three-dimensional space it doesn't look like this it looks like kind of it's got three levels of the stack table in addition to opening tails north south east to west we can open pairs up and down but are used to walking in the ground plane and we're you know even as first person game players we're trained to navigate in that time and vertical traversal ins have been really difficult even in a game like eldritch where there were a lot of powers and abilities to try to give you vertical traversal it just wasn't a lot of fun to do so I just the the maze expansion to always explore the ground plane and only when it terminated and couldn't go anywhere else then I would make a path up or down and continue to explore kind of the next story of the maze and the last modifications I made the prims algorithm it's not actually even part of the algorithm per se but after we've run this all these steps and we've generated the maze I just randomly knock down a bunch more walls and what that gives us is we look at this and we wanted to have loops in here I want to have some long lines of sites and open courtyards and and the maze generation by itself wasn't producing the event but if I just start knocking out walls I get this sort of singing and I could have done a really intelligent system here if I you know try to identify a long loop and find like the wall I can knock down to make the most interesting kind of level it turned out it amazed this small knocking down any random wall gets me exactly what I want and never has any bad side effects so it was likely again the simplest thing that could possibly work and that yeah it took me like five minutes to write and it makes a huge difference this is actually the modification to prims that that makes the most difference in a level because if i turn this all the way up like i get wide wide open spaces where if i turn it down I get like claustrophobic levels and it's the difference in like it starts from the same may use an algorithm but you end up you know in a picture like sorry I gotta go way back so in the picture like this it's a very open space we've got like connectivity all between here emmaus by itself could never produce this right because they would do the walls like looting all this so yeah this ends up being the most useful factor of the three modifications I made sorry so that everything that was talking about with the maize generation so far I'm kind of talking about regarding all space kind of is equivalent but in the level in Eldridge there's other things in the other level besides just corridors and coroner's there's the entrance and exit level are kind of unique features there's shops there's bank vault to rob shrines to acquire powers at and each of those is going to have to have environment art and the mobs all made for it and that has to fit somewhere into the maze shops you always enter from one side shrines the I would sometimes tend to put them in coroner's the exit of maze they always had to go somewhere specific like the the entrance had to go on the top of the maze the exit had to go on the bottom so I had these special rooms and they had to go certain places in the maze and the the the first way that I want to do this was to generate the maze and then search it for where I could put these features the problem is because like the geometry of the exit the geometry of a shot any of those kind of things he had to fit somewhere specific in the maze and there wasn't always a guarantee from generate in the random maze that I would have a place that could go for example I want to put a shop into like a Daddy end because it has one entrance in this example there's only one place that could go in in the top right corner that's the only dead-end in the maze like if I kept clanking that that open to any knob way up there wouldn't be anywhere to put a shop and then even though I need that like for balance and for tuning purposes it just couldn't fit anywhere so I found like to do I don't search the maze for a fit for these rooms I actually feed the maze with the rooms that I need and I prescribe like this room with this structure he has to go here in the maze so it looks like this it starts even before we run prims algorithm we've got the maze that's all closed off and we say all right here's going to be a shop here's going to be an exit and we open up not just those were them sponsor their neighbors and then I'd lock the rooms that I actually have those features and them the shop and the exit and they say when I'm doing the maze expansion nothing else can ever touch those walls so I run the maze expansion it goes from from the neighboring rooms i oh and then we get the whole maze built out here and I've got that guarantee that like nothing is going to knock down the walls of the shop even if I crank up the open up to the world tuning knob all the way and knock down all the rest of the walls that generator is going to guarantee this shop is always going to have this structure so now we've got this kind of abstract May of filling three-dimensional space but it doesn't have any environment art that doesn't have any geometry yet I use a modular approach to this like you may have heard talked about last year for Skyrim I build small chunks of the world and each cell in the maze is going to get filled in with one of those chunks eldritch uses of oxalá engine the each module is 12 metres by 12 meters by 8 meters high and I just build them kind of like the way you do if you're in like creative mode and minecraft I have an in-game editor I put voxels down the challenge is that every module has to connect within other module I don't have any guarantees about like which ones are going to tick - Jason - which others and with you know 12 meters on his face there's kind of a lot of ways there's a lot of space where they could join this was another case where I just did the simplest thing that could possibly work I made a safe region on the exterior face of each module and that's what's highlighted in yellow in these images so any module that here's the intends to conduct on that face if he has to fear that space be open and so like in the image on the left this module connects in both directions one face is completely open the other is walled off except for that safe region that ensures that those two faces could join together it will always be traversable by the player or by enemy AIS I could get some kind of fun effects by playing around with opening up geometry and the exterior face outside of the safe region in this example like this sorry this picture is kind of hard to see but we've got a corridor so we're looking at the module from the outside and got a corridor that goes inside in the safe region but we've also got kind of an opening up here on the top outside the safe region and what happens is that we get kind of just serendipitous attacks by when windows module meets up with other modules it just kind of interprets what that opening looks like so the typical kitten like the most common case is that it just looks like a balcony you open on opening up on to the adjacent module but sometimes there's some geometry in the adjacent module it looks like this is part of a feature you know the two rooms shared the kind of crumbling away sometimes we get because the the voxel grid is so low resolution there one meter cube voxels we just get a lot of features that serendipitously join here so in this the adjacent module had like an upstairs level and it just looks like it connects to that opening and actually this really hides like the boundary between the two modules really well like this just looks like one space you wouldn't look at this and assume there's two separate modules and then sometimes because this opening is outside the safe space it just ends up running into a wall and the player you know they approach this from the other side they open the door and they're like looking at a dead end it's just a wall there and I was like well that's that's not good you know I want the levels to be semi coherent but that just seems like a bad use of space and then I realized I can just put some loot on the grounds there and then it looks like a loot closet and it looks completely intentional so yeah I was just this was the sort of thing and I didn't do this too much in the game because they tend to feel like players starting to perceive this pattern and it's starting to break down but once in a while is kind of nice to get these kind of serendipitous results so in the maze there's the six directions that any room can exit for south east west up and down that means that there is 64 different combinations of rooms of ways that rooms can be configured to to the power six 64 that means that ostensibly we would have to build a module to fit in each of the 64 configuration so of course we think that wouldn't make sense like a real must and exit to the north it's the same as a room with an exit to the staffs just rotated so the generator will do the rotation for me so if we have a tile it's got exits to north south and east the generator can rotate that about the vertical access like we would expect and give us a module that will fit into the other rooms this is just what you would expect if you've worked with modules before it's just like laying down the tiles in the city building game but the other thing that we can do that you couldn't do with physical tiles is we can also mirror this and so when I do this I get a north south and west exit which we already had in the first row from rotation so mirroring isn't necessary like it doesn't it doesn't fill any void and the level generator but it does kind of reuse the modules in an interesting way because if you rotate a room like the player doesn't receive that you know if we took this room and rotated at 90 degrees it just feels like the same room we're just placed in a different direction in it when you mirror it you do get you know the flipped image and the player actually perceives that as a different kind of room it did add the constraints I could never like I couldn't try to spell something out on the voxels because then I would get the mirror image and the word would get reversed so by using those transforms we get 24 configurations in the maze that we have to build modules 4 instead of 64 and if you know I can imagine if I were building like a six degrees of freedom descent style shooter I could even we do stats that more because you could take like a room that has an exit to Norris and rotate it up but since eldritch has vector integrated I couldn't do that so 24 configurations to build modules for that doesn't sound too bad but we don't want the maze to be homogeneous we want we don't want for example every key Junction to look like every other key Junction so I need to build multiple modules for each of these 24 configurations and that starts to sound like a bit more work I also don't know immediately how like how many modules do I need I want to avoid repetition in the level I want to have a number of modules I can plug in to any similar configuration in the maze but how many so I wrote a little tool that generates a maze 10,000 times and just dumps a spreadsheet of like here's how many times I hear that dead end room here's how many times I hit an L Junction or if Yi Junction and then it sorts those by by the frequency and so that doesn't give me like an absolute metric of how many modules I need to build but it gives me a comparative metric of like L junctions appear three times as often as T junctions I should build three times as many L Junction modules so that they'll you know there's a bigger set to pull from because you'll see those more often in the maze I ended up just I mean this scales really well I could build like even today I could go back into eldritch and build more modules and it just gets like thrown into the mix and when I generate a level sometimes you'll see those sometimes you want I just had to you know kind of decide arbitrarily where I was going to cut that off and how much work I was going to do why did was like in the statistical report if an L Junction shows up eight times in level I built a variation to that module it just seemed like a good number to do and so between all the the modules that go into the maze and modules that had specific features like shops and entrances and exits and shrines I ended up with about sixty modules I had to build for each world of the game and in in the first version of eldritch relationships I think there were about 300 modules across the course of the game so one of the things I wanted to do is have each world in the game represent kind of a one story from from Lovecraft subra this the first world of the game was loosely based on the shadow over Innsmouth and it's supposed to represent kind of a cave system and sunken ruins beneath a New England town and the way that I wanted to do that was to represent it like the team with red brick and steel beams and then have a kind of cave system because they had and then some congruence at the bottom and so I just started building modules that had each of those themes and them and it ended up being very visually noisy it felt chaotic I wanted levels that worse in my coherent but this just felt until I you see you didn't it was beyond not making sense to just not looking good so the first thing I thought I could do was well just let each of those schemes they out into its own modular set I'll have you first still go through the warehouse level then you'll go through the caves level and then you'll go through the through the ruins level the problems that would triple the amount of modules I needed to build each of those would have to be a complete set my solution here was I just explicitly declared each module by was building as part of one of those themes and then why generate a level the generator lacks one of the themes from the set to be the dominant theme so it sounds like maybe this is going to be a warehouse well and it prefers to use warehouse modules when they're available but if for example I'm building in the maze has some some room in it and I don't have a warehouse module if it's that room it just falls back to using whatever else it can fit in there and so then I go from like the scene on the left if I do it like the color coding chaos over it like the bright green parts here are the ruins level and then the dark blue is caves and the red part is warehouses and the image on the left is I looked like before where it's just you've got all these themes all in the players view right here and it's just kind of visually noisy after doing the steams PS I ended up with levels like what you see on the right where everything that you can see in here is from the ruins theme and then you know maybe at some part in the level I don't have a ruins module that sits in there and so it falls back to using caves or warehouses and at that point it looks okay it's like sure I buy that maybe you know this funk can ruin touches into a cave system somewhere that looks fine but it's not so visually noise yeah so most of the modules I've been talking about are just things that populate anywhere in the maze I also need to have the modules for future rooms entrances and exits shops find all these things this is basically the complement of the prescribed rooms in the maze the things where the geometry had to be locked down in fact in the data it's all the same same like this is definition for a bank vault in the first world the first like six lines describe where in the maze that's going to go and then at the bottom it says these are the modules that it can use there and I use this for a lot of things not just like the shops and things but also to add points of kind of really rare visual interest things that would be key landmarks kind of both visually and experientially the image on the left here is from the second world game and it's it's kind of hard to see probably but it's a throne room it's being guarded by these two statues they're like weeping angels from Doctor Who if you're familiar with that they come to life when you look away from them there's no other way to get to the throne room except to go PS these guys so it becomes a very dangerous challenge this is the sort thing it's memorable when you see this it stands out it's you know a really cool encounter that's a little different than just fighting enemies on the rest of the game but I didn't want to use these too much I didn't want to have them show up all the time so at most you get one of these per level there's not even you know guaranteed to be one but just let me do something you know once in a while just mix something fun and just a little you know kind of unique bespoke encounter that gets mixed into the levels somewhere I also use them future rooms to do things like the image on the right that's a ziggurat at the end of the first world and it's bigger than any feature that you could the maze could generate on its own because it's actually built eight modules kind of arranged into a giant cube so you would never see a feature this large just in a typically generated novel and game it can only happen kind of when I build it as a bespoke scene so now we here we've built the maze we've populated it with the modules and we need to spawn some some objects into it some enemies to fight some loot you know the goals I had for this first are kind of things that you would expect building moment you know levels by hand you have to challenge the player with enemies and traps you have to give the mix an incentive to explore I have in loot to pick up for a procedural game they were additional it also like I have to actually place these insensible locations or the generator has to play some sensible locations and I also had to control the groups population like I didn't want to leave up to chance how many enemies are in the level I want to be able to ramp that up over the course of the games like the first world there's a dozen enemies and at the end in within the same space there might be two dozen die needed to be able to control that I've never even considered trying to write an algorithm to place entities like there's just so many rules like if I'm trying to place a light in the world we all kind of have assumptions from being people about where a light fixture might go but trying to codify that into a role set would be really really difficult so I knew that I wanted to place entities by hand but I didn't want to say like everywhere that this one module shows up there's always going to be this kind of trap or this kind of enemy and you know I think this sort thing is used in games with hand-built levels as well as procedural games for I did this to just kind of abstract the concept of putting an entity into the world one step away so that when the when I generate the level there's a rule set that runs that says like alright here's a thing you know as a designer I put a spawner into the world and there's an opportunity for something to spawn there but then there's a role set that's going to run this I do actually want to spawn something right now and if so what's it going to be the most basic version of this is like a spawner that says it always spawns and it's always this one thing and we use that like for the player spawner because you always need a player I could do spawners they had a random chance I did this a lot for traps I would you know just cover a module with like spikes on the ground or tripwires criss-crossing it but then give them like a 1 and 2 or 1 in 3 chance to spawn so like the the specific arrangement of the traps in that room will be a little bit different every time that runs what's more interesting I could do is to actually randomize what entity responds there this is an example of when you've broken into a bank vault you know there's there's a bunch of coins to gather up from behind behind the dais and it has a 75% chance of spawning at all and and if it does spawn it's got a three to two chance to spawn a big pile of coins which is actually separate entities in just a single coin I use this also for for enemies I would just place a generic enemy AI spawner and then it had a table like here's all the enemies that can actually be for this level and their way you type I like we want a whole bunch of kind of grunt in them you stoie am in like one really tough sky so i could do that kind of thing then i needed to control the population I called this resolved groups which is a kind of bad name but basically the idea was I gather up all like the spawner star tagged a certain thing like all the enemy AI spawners and then I run some rules I call the stat of those and I'm able to resolve that into a subset of things I actually want to spawn I use that for enemy AIS for a few really rare items like healing fountains that they not only kill you but increase your max health things I really needed to control the number of those that appear throughout over the course of the entire game and this also let me run some additional rules while I was doing it like for enemies I want to enforce the minimum distance from the player spawn it was a really terrible experience early on in the game when like you would you know I never put an enemy AI spawner in the same module as the player spawn they could end up like adjacent to something that had three enemies in it and suddenly you know you've got monsters in your face and you've just entered the level so I just put a minimum spawn on day or so when it when it's resolving that big set of spawners into the small subset that's actually going to use it just gets rid of anything that's near the player anyway Spahn replacement was something i didn't think a lot they out until very late in development when I started I was just I was building modules and I put enemies in them I put some tree up Stan I put some blues I was kind of putting a little bit of everything everywhere and as the game progressed and as I you know play tested it and felt more comfortable understanding what the game was I realized that the place to have items was actually really key to guiding players through the level even in a randomly generated level players are really good at perceiving repeated patterns and games like it's really easy when you've played the game a few times to say like oh I recognize that that room is a dead end it's not going to get me to the exit I should just not go that way because I'm you know I'm doing fine I just want to get to the end of the game right now instead what I started doing was I get in put loot like along in any room that which you have junctions I started not putting loot in there and just putting it in dead ends so when you're going through the game you do some combat you're running low on items you see a dead end and you know that it's not the way to the exit but you also know there's going to be loot there you know that's where you can go and replenish your bullets replenish your money traps I ended up moving into hallways and I use hallways kind of liberally here to mean any module that has two exits whether it's literally a hallway or an l-shaped corner or a vertical mineshaft anything where the players experience was really just to traverse the space there's not another choice to be made there that was a good place to put traps just make that traversal a little bit more interesting I also put tray ups and downs it's kind of to guard the loot that was a really good place for them and then enemies I wanted enemies to kind of congregate around junctions there was no really good way to to ensure that because enemies in eldritch they wander randomly it kind of didn't matter where I found them they were going to wander all over the level wander into the traps get themselves killed but the Tauri experienced like he had and it didn't quite work out was they have enemies at junctions where the player could choose to you know circumvent an encounter or sneak PST and have some options and use this you know the fact there's multiple ways into the space as part of that encounter like I said this is stuff that I didn't start thinking about until really late and which is development and it's kind of this is what I want to leave you with and this is the key takeaway is this stuff made the game way way better and this stuff is not like mutually exclusive from random level generation the kind of rules that as level designers you've internalized you have your expert knowledge of what makes a good level and how to build that if I had had that I would have known to do this sort of stuff much earlier in the game I would have been thinking about these kind of things earlier instead of having to kind of stumble through it so that I won't want to leave us is I hope that as level designers you can be like super excited delight I am at that procedural level design but bring the expert knowledge that you have that people like I don't have into it and find you know ways to do generated levels better than what we've seen before you know make generated levels are better than Heldrich because you know what makes a good level because you've got that experience and they're proactive so I think I actually plays through this a lot faster than I intended so that's my talk thank you for coming listening and we definitely have time for questions if you've got in me yeah go ahead and use the mics if you have any questions for David line them up this is going to roll right into the lunchtime portfolio review so anybody who wants to ask questions for David we want to prioritize those questions and then as those taper off we're going to go into the portfolio review for anybody who is leaving coming back for launch or trying to drop in early what we're going to do is we're going to go through anybody who has portfolios that they want to get critiques on and if those don't take us all the way through to the beginning of the talk Brennan's talk at the time we do drop I'm sorry 145 145 145 okay so the next talk begins at 1:45 will do portfolio for you till then if we run out of poor fails we'll do an open Q&A with anybody wants to talk to the speakers until that point hello okay so I'm kind of in the same boat where I started out like programming knowledge and then I'm started going towards the design so I understood some of your constraints one thing that you mentioned that I haven't explored and as curious about was you said you had problems with the verticality like you had some things and I was wondering to expand on some of the experiences you had trying to implement more verticality and what the negatives of that word sure yeah the question is about verticality in the levels and if I could expand on you know some of the experiences I had with that building Eldridge one of the things I just kind of skipped over in the slide let me see if I can get back there the when I was talking about like the safe regions in levels the image on the right here is actually the safe region for vertical traversal it had to be lighter than the one for land roll traversal just because like what it takes to move vertically you know we've moved up specifically like falling is really using games but to move vertically you know el trote actually has a pretty sophisticated Minh Thuy like you can mantle up onto under two meter high objects you have powers that can just boost you into the air and things a rope gun so you can just shoot folks into the ceiling and climb up them there's a lot of ways to move vertically but I couldn't count on the player to see any of those at any given time so I always had you know when I would make a module that's supposed to connect upward I would have to build like kind of these really ugly elaborate staircases up and ended up being kind of like all the worst rooms in the games are the in the game are the ones where you're trying to move up because there's no space left for anything interesting to happen there once I've got a and if I could have done something where like I if I could have guaranteed that the player never had to move up and you could just sorry and you just sell between levels then it would actually be a lot easier to do that because you know like I said falling is really easy thank you thank you thank you very much it was really interesting I think now um I was just curious how long I see that you build a lot of tools and they do a lot of tweaking I just want to know how long did it take you from taking it to the like for the first part until that you felt that your tools are where already generating like really good levels right so the question is how long it take the I guess between like kinds of first pass version of this and when it was is like when when the levels were good or when the tools were good which are you asking when the levels were good where you felt like okay I'm not touching anymore it's good yeah I'm not sure I can really say like the development the game was so accelerated and I was kind of even upped until the very end I was still changing things but I also built the levels chronologically which is kind of not best practice so like the first world in the game was the first on my build and I think even maybe see that in the game of like the first world is a lot more experimentation I like by the end of the game I kind of figured some of that stuff out but the tools actually didn't change too much it was just kind of like I said on that last slide I was figuring out what worked to make a good Zelda on how to guide the player in a random space thank you hello thank you very much okay I would like to hear any comments or tapes for non-scripted and people in the downfalls of using or script in the procedural system rather than using a dedicated software for generating that thank you it was a question okay say for example Houdini who is a dedicated software for procedural generation levels what are downfalls of actually coding your procedural code and using a 3d package right I'm sorry I misunderstood what's the advantage of using an existing solution for for procedural systems instead of writing my own so I actually haven't evaluated like I mean I didn't even know that sort of thing existed I think in the case of eldritch it's kind of the same problem I have coming from AI programming it's like so much of procedural level generation is kind of innate to what the game is I don't know if there's a solution out there that would suffice for exact revised trying to make and also I mean honestly this stuff like I probably spent about two weeks working on the Chuck and two weeks building two levels like a relatively small portion of the time I spent making this game was actually spent on this stuff it didn't take that long to get you know to where to where I was able to start generating bubbles on this you know if I were trying to do procedural levels on a big budget came and there were much bigger requirements I probably would consider using something like that but I don't know I haven't tried that alright hello thanks for giving your talk sort of more just stayed overall development question you said you built your own game engine for this game how difficult was that and bingos worth it using that it gave you tools you needed that you would have had wouldn't that otherwise or you think about uh save time using an existing game engine so the question is was it worth building my own engine for this game so I misspoke I didn't build the engine during the eight months I was building eldridge like that that would have been impossible the I've just kind of been as a hobby building an engine since eight or nine years ago and so it was something that at this point is pretty mature and something I'm like I work very efficiently yen it's kind of like if I had my own licensed engine like that's just how comfortable I am in it and and how capable I am in it so I wouldn't necessarily recommend it to everyone for me it was kind of like you know I I'm more efficient using my own code than I would be like if I were using something like unity or unreal but I wouldn't recommend it probably to anyone else I don't know if you have enough experience with unity or unreal but if you want to do something like this in an existing engine do you know what would you have any recommendations or good question um I think there are tools on the asset store and on the SS store for unity I I know that some people have done procedural levels like then even going back to like the original Unreal Engine it's sort of different because it tends to make assumptions about like how a IP apps are built and things like it assumes that the world is static and not pieced together at runtime but yeah I'm sorry I can't really speak to existing solutions it's okay thank you yeah thanks if you were going to make a sequel to Elbridge how would you modify your algorithm going or knowing what you now know having made Eldridge good question that may be something I'm actually thinking about so one of the things I wanted to do on the eldritch and I kind of just got rid of it because of you know trying to do everything as simple as possible but I wanted to have modules that were different sizes one of the key constraints here is that every module is just 12 metres by 12 meters that's not a lot of room to work with and I had planned to have like support where that you know if I could search the maze for a fit and I could say like well here's a space where I could put in like a whole big mineshaft and I could design that it's like a sort of unique feature that would be cool in that it would give me a lot more visual variety and sort of precision to the levels and if I weren't doing the Lovecraftian thing I think that's something I would almost definitely have to do it was just kind of trade-offs I had to make on this game to get it done fast but yeah if I were doing that in the future I think I would want to have the ability to make modules that were different sizes that could still join you know and still be on the same grid as the maze I think because that you know that's just a nice feature to have but yeah the ability to do to do module several different sizes would be a big one Thanks Thanks thank you for the talk I was wondering about the overall pacing in your game how were you able to shape that did you took places or yes so the question is about peace in the game and how was I able to get it here shippable state I did do a lot of play tests over the course of development it was also a game where one of my key values was like you know I love immersive seems like Deus Ex dishonored the sort of thing as I mentioned it first and so I wanted to have the sort of value of like play at your own way you can kind of build up any showers and bathrooms and always have a solution to the map which meant I couldn't really control piscine at all I just kind of had to throw a bunch if you choose them and hope that the experience was good it ended up being kind of a system suit it doesn't have great tasting the only patient I could do was like you know like I said ramp up the number of enemies over the course of the game you know be in between levels I could say and I could give like you know scheduled item drops and say like in the first world of the game you're not going to get the most sophisticated powers so kind of you'll get there eventually but yeah like within a level I really had no control for like encounter piecing it was just kind of like stuff's gonna happen and I hope it's cool so cool thank you I think that's everything all right thank you for time [Applause]
Info
Channel: GDC
Views: 26,696
Rating: 4.8989897 out of 5
Keywords: gdc, talk, panel, game, games, gaming, development, hd, design, level design, eldritch, minor key games, steam
Id: BYN0PJOdvzs
Channel Id: undefined
Length: 50min 14sec (3014 seconds)
Published: Sun Jun 25 2017
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.