[Music] so let's just hop right into it my name is Kurt laude and I lead the charge for AI and the design sighted software while Jake Campbell you may recall from last year's talk on AI and full body animation and doom heads up the AI Department on the programming side we're here to talk to you about push forward combat the principle that guided the design to doom now push forward combat was a guide for all aspects of doom including narrative level design player progression but in the interest of time we're just going to cover its impact on combat to that end we've broken it down into three key components the gameplay loop the tools available and how to create interesting scenarios you may have noticed each section as a short phrase behind it throughout the project we constantly checked ourselves and made course corrections as needed to ensure that we stayed focused on our design goals associated a phrase or keyword where the design was crucial and reminding us that the original intent as we iterated so without further ado let's jump right in one of the first things done after the
final reboot of doom 4 was the creation of a mission statement to set the tone for Doom you were the doom marine hell's worst nightmare beating back the relentless onslaught of unimaginable evil to make sure this mindset was always heated during development it was clear a meking of mechanism was needed to check the incoming flow of ideas against thus push forward combat was born this was a response to the previous iterations of doom for that while awesome in their own way didn't capture the field the original titles to make something truly unique and worthy of the name it was clear the game was gonna have to step back from modern conventions and get back to the franchise's roots but when we say something isn't doom enough what does that actually mean we went through a process of asking what are the best moments and mechanics of doom as a whole whether it was doom 1 2 3 were the previous versions of 4 what are the things that resonate with people that constantly come up in discussions of past titles and why were they special and what struck a chord with us moving comically fast yet still in control opening an unassuming door only to
reveal a horde of teaming monsters hiding behind it over-the-top gameplay and a memorable arsenal that gleefully allowed one to punish hell's minions our key takeaway from the classic says that if you're not moving you're dead to that end the player restores health by engaging in combat not abstaining from it secondly weaving between projectiles is a lost art and it's actually fun enough to pirate our entire genre now Gor that's actually rewarding player feedback not for while doom was originally labeled a violent game it was never in a sadistic or realistic sense doom one or two fell in the realm of what we call popcorn horror and channeled b-movie gems like Evil Dead 2 our army of Darkness this was a guiding principle for us as we took blood and guts to triple a quality never approached saw or hostile type gore that makes your recoil er wince rather aim for something that really channels that adolescent glee or gets a snicker out of you now one thing that was contentious is reload the argument for argument for it boiled down to two things one we're building a realistic world and Alyssa Gunn is an energy weapon of some sort
you expect clips and to the perception that reload adds to the strategy of combat however that is really mired in the entire package of cover shooters and yanking out a single mechanic without it supporting supporting systems significantly curtails its value which finally killed reload was introduction of the weapon wheel now because combat is so fast frenetic a player would immediately switch to another weapon as soon as they're clipped emptied and they'd eventually cycle through their entire arsenal at this point they would be full in full retreat as they'd ran away from monsters trying to slowly restock their weapons and this is one of those moments where the game tells you explicitly what it does and does not want I thought this quote summed it up best Kratos doesn't stop to reload his chain blades how do we make an experience that's true to the original titles but is appealing to a new generation fans that never played them now when you think about a shotgun the first things that come to mind close range high damage inaccurate for those reasons it doesn't play well when exchanging fire from cover there's really only one way to play a shotgun and that's by charging straight ahead
thus the hero's weapon is basically mid-range melee we found a lot of common ground with brawlers such as exaggerated AI tells and encourage players to dodge or counter them AI behavior that's predictable and easy to grasp on first glance crowd control systems such as fight circles pain locks and active attacker count and lastly finishing moves to reward player ability ideas were starting to flow like crazy and was clear we needed to filter this was dub push Ward combatants was to make sure anything added to the game adhered to the core pillars of franchise speed of movement individuality of the demons distinctiveness of the weapons and the sheer power of the player this image illustrates push forward combat in action double jump was a great addition to game because it increased player mobility and allowed you to close the distance from an even farther range reload on the other hand briefly made the player unable to attack and force us to disengage from combat we trimmed a lot of features because we don't necessarily want the player to have multiple avenues to accomplish their goals doom is meant to be played a certain way because
you're the do marine and you're here to punish hell's minions so now the push forward combat was firmly in place we were able to produce a previous animatic to help everyone understand what the gameplay loop could be [Music] now it's time to make this a reality this sentence summed up our goals perfectly make me think make me move push forward combat gave us combat chess our name for dooms gameplay Luke the four building blocks of this our constant movement sizing up foes improvisation both with your weapon and how you navigate and lastly putting the enemy on their heels we've you had enemies as combat puzzles
and the solution was the arena your arsenal and how you chose to engage them so what's unique about combat chess well for one we don't have a front its 360-degree combat which is very different from modern shooters what we did because of this was we actually saw we had more in common with MP map design than we did single-player now yeah they can attack from any direction and they have the same accuracy parameters on and off screen so it's important that the arena can actually protect the player there's very few props in our world as the feeling of skilled movement trumps any sort of environmental storytelling so its combat is designed for medium range creative line of sight blockers are crucial half walls were actually our secret weapon since they're impossible to miss a jump a single jump will hit it in mantle over while a well-timed double jump lets you clear it cleanly Bruce Lee on a skateboard with a shotgun is a phrase that we use to describe arena combat its importance can be understated because the right-sized arena were just the right amount of space actually makes the player feel faster see while the doom Marine is exceptionally fast your acceleration in your agility actually
exceeds your top speed so in order to feel fast and doom it's actually comes from the speed at which you pass Gio change direction and weed between other monsters there's a lot of oscillation on player speed until we nailed arena building since right-size spaces make you feel exceptionally fast it's still in control the player to that end the players need to move with purpose as stated above MP map design hinges on repeated traversal of a space with clear navigation options humans are excellent making split-second binary decisions but when you had four or five options it starts to get dicey players start evaluating the pros and cons of each route on the fly and that simply won't happen in an f-22 Ferrari which was our internal name for the doom rain in combat lastly we tried all sorts of layouts but circles were one that just never panned out for us it's a symmetrical shape which makes options unclear has limited lateral movement and a I often take the same route resulting in the player and the AI just chasing after each other racing games have to solve landmarking at 200 miles an hour and they realize the power of asymmetry here's our movement map in
action which is our testing bed for player mechanics in arena design these right here the half walls I'm talking about and this is actually a full double jump gap now since attacks aren't limited to a pie slice players must dot must be able to die out in the open so what we do is enemy accuracy actually adjusts to player movement speed if you're doing what we asked and going full-tilt then the AI purposely miss well if you stop or dawdle you need to be smacked on the wrist projectiles allow us to prompt more player responses and hitscan attacks aside from simply sidestepping or using geo you can also jump duck weave shoot them or generate friendly fire with an errant toss the latter is particularly important to us because enemy in fighting is courted demon characterization now third-person action was treating us really well and so a take on backstab was briefly part of the combat loop light Z targeting was active
by default and as you attacked a meter on the HUD would change color once it turned orange you can instantly swing behind foes to do some bonus damage well if it turned red you're allowed to dash into them and do an instant [Music] now there are a number of issues with this such a sacrifice and smooth movement sudden view shifts and now you're having to do HUD meter management but it did teach us what's - brawler and not enough shooter most importantly that taught of shooting foes behind was not particularly empowering and it's far more satisfying to put your hands on enemies and demonstrate your brute force a flashy AoE attea AoE attack in a box
map is truly a sight to behold but once they were transferred to a combat space with real art props and other AI it would either light up two allies or more effect more effectively than foes or worse the player would just zip right by him and not even notice our litmus tack litmus test for AI attacks during reviews was would the player actually noticed this flying around the arena an f-22 Ferrari see projectiles they're basically incoming traffic in a racing game and capture that feeling of a blur wishing by now imagine certain cars randomly blow up on the highway worse the AI can target those cars too suddenly weaving between blurs is no longer so smooth since you need to check their model first now doom it's designed to make you feel like you're up against overwhelming odds but in reality the enemies are balanced such as the doom rain can easily handle them one-on-one the secret to selling this fantasy is having enemies hold their positions so it's on the player to rush forward and engage them limit the amount of active attackers so the player isn't overwhelmed grant the Arsenal the ability to interrupt and lock down enemies have properly used the result as
players now prioritize engagement on the battlefield hone in on who they perceive to be the most imminent threat and then move down the line we tried out player AoE B or various shockwave attacks but they just don't come off well in first-person worse a magic ring that shoves the AI back pales in comparison to the physicality of actually putting your hands on enemies the interrupter parry strike is rarely a finishing blow in a martial arts film thus we needed a simple hierarchy of enemy control States before you actually deliver the coup de Gras the first one is twitch where the enemy plays a reaction but it doesn't impede combat second is falter which stops the current annum and makes them restart combat and last is stager which briefly takes an AI out of the fight this also allows the glory kill to be performed these three states are sufficient for most cases where we did find a need for intermediary animals for AI that have a lot of hit points or susceptible to pain lock like the revenant they still serve the same function as The Associated class but they make the AI appear more responsive to player actions lastly we
give AI a second wind if you let them out of stagger monsters always need to be dangerous and this was a fun risk reward mechanic since the glory kills have such a high payout for the player here's a short clip of those states in action on the main Kubis [Music] now in the original title the shotgun was multi-purpose and you could play the whole game with it so we wanted to dial in the player's arsenal and start thinking of them as tools for example the combat shotgun in our version of Doom is short to medium range decent spread and has a high chance of stagger while the super shotgun is only close range has massive spread massive spread and often over kills foes weapon mods allowed the player to tweak a tools behavior such as triple burst tightening spread and lowering fall off which now gives you a strong medium-range shotgun while pop Rockets turned into a grenade launcher so you give players a long-range version through play testing we found certain weapons felt natural
against AI archetypes and we actually hard-coded responses the imps greatest asset is its agility so the heart was a guaranteed way to say hey stop moving glory kills they're new to doom and the best way to teach them was to make your default weapon the combat shotgun varies fray vary stagger friendly on fodder thus fall-off is severe to prevent overkill on weak ones like the amp and the zombies and we also circumvent the standard hit point check remaining on the soldiers to make it very very likely you'll trigger it now we did try having the chain gun instantly pain like that academia as a fun Easter Egg for fans originals but that was one of those moments where it feels like the wrong kind of retro and the modern AI just feels broken it was clear from the beginning that resource replenishment needed to be part of the core loop we took inspiration from action RPGs where you kill search continue as well as the original soldier class which we're walking hit walking health packs and do one and two secondly we found hit point hit point drops they need to rubberband beat so that way the player is not discouraged from engaging the low hitpoints to that and heavy characters actually do a lot more rewards to
incentivize tackling the most challenging foe while you're in dire straits ammo on the other hand cannot rubberband see tools are useless if you can use the same one the entire game and to add an additional layer of strategy we actually add ammo shared amongst tool categories now while enemies they can drop any ammo type we actually introduced a slight bias towards dropping shells and against Rockets since combat is designed for close to medium range it's important to reward aggressive play so glory kills increased drop amount most importantly though they always drop something even if you're topped off and lastly we had to find a role for the chainsaw now the chainsaw is primarily featured in many fans recollections of Doom 1 and 2 we had the hardest time figuring out how we're actually going to integrate this in a combat chest now the pistol was a late addition the game so the chainsaw for the longest time was actually your original infinite ammo fallback weapon much like the original game you would touch AI with the dedu continuous damage palm has that felt to like the wrong kind of retro and once a pistol came on board its role was
redundant next we tried a non-fatal sync where you'd actually pain lock the AI and inflict big damage should that prove successful it blends to a cool finishing move otherwise you'd disengage in the fight continues anew we then added a minigame to circumvent what however many hit points the monster had and allow an instant kill if the player was sufficient at controlling the blade like backstab before focusing on a HUD prompted combat was very distracting and often fatal the aha moment actually came for us thanks to the mink abyss chest glory kill now see this animation is quite long and many times the player at low health will get killed waiting for them to finally explode and dole out the drops we added an animal vent to force the drops early but this had the unintended consequence of doing double drops created a pinata like visual that ignited the spark of purpose though and games too thought the chainsaw could create an ammo pinata on any enemy replenishing your resources we then lowered drop rates started removing ammo crates from the game and gave it a currency to prevent abuse but we also want to make players think about who they use it on see targeting fodder is
the most fuel-efficient approach however it's very tempting to use a chainsaw on a challenging adversary because it's a guaranteed glory kill by making fuel a rare currency it was now something there was an enticing reward for level designers to place around the maps lastly since the chainsaw was now part of natural replenishment the player need to be able to access it immediately thus we took it out the weapon wheel and we mapped it to a face button on the controller when it comes to AI design our motto is kind of get you a monster can do oxc we just want you to do one thing really really well we call them Swiss Army knives at first because AI they originally designed to handle anything so that way they could fight solo and look good doing it they I also had lots of cinematic flourish such as injured movesets elaborate death animations and coordinated attacks the problem is monster count as a pillar of the franchise and we already identified battlefield management as quarter combat chess thus doom needs to be about celebrating the player an a are there to support the power fantasy see players don't have time to appreciate the view on doom because all the systems have been
designed to keep you moving by the time an AI has executed an intricate behavior the players either shot them to death or move down to the next foe thus the AI they need to be straightforward enough that players can describe them in a single sentence hey I also need to be thought of as ingredients not an entree it's how you put them together that makes a tasty dish lastly since crowd control is crucial to combat chests players need to be confident their tools will work the do marine always has the advantage of solo combat but it's how they approach the crowd that determines success or failure we had 16 different AI archetypes in the game so I'm not going to go over all of them but I did want to touch on two of them both of these are legacy characters that deviate from the original implementation but I feel they capture the spear of the AI and show our approach to both ranged units and melee units first one is imp we called them our archer class and while their ability suite is rather limited they form the core of doom simply because of what they taught the player push forward combat really clicked for us when this AI was introduced because counter-attacking felt natural for a slow arcing projectile their small size and jumpy
nature also made players chase after them the addition of a fastball was a game changer for us just like a good pitcher needs some off-speed stuff the MSHA behavior immediately went from repetitive or bus they now taught the player how to dodge both the slowest and fastest projectiles in the game most importantly they stood still and cook their powertech which now told players hey you should interrupt him rather than actually waiting for them to strike wait waiting for them to go and then counter them hangouts further reinforced threat management should imps be left alone in an advantageous area they climbed the space and enter a heightened state where they had a stronger bias towards fast balls shorter attack cooldown and now they could no longer be faltered or staggered next up is a pinky they brought what the player learned about Jade dodging projectiles to the melee class but added a new wrinkle as they were not another heavy that you simply pointed your weapon at and shot till they died see when Doom was released a number of outlets they paid us a tremendous compliment of saying we felt like a Nintendo game despite the violence we took that as being intuitive easy to pick up and always putting fun
first is there afraid to embrace being a game to that end we made the entire back the weak spot not just the tail this avoided looking down her first person and requiring precision shots and an f-22 Ferrari we started out with couch pinky which was a charging loveseat with a big red button on the back players got it immediately but one of our pillars is cutting-edge graphics and so it took us nearly nine months of iteration to make a visually acceptable big red button that works in a PBR high fidelity world we tried several unarmored versions during the stretch but there's no longer D game to the charge and the pinky just lost its purpose while some may find the armor frustrating that taught us that compromise to make everyone happy doesn't jibe with a game that's designed to be played a certain way lastly the ideal charger scenario corridors and long hallways they rarely occur in our game thus pinky is one of the few AI few AI that can attack while traversing gaps in the navmesh or passing through smaller AI I'm surrounded by ten enemies and I sized them up based on how they look and what I do what I know they do this is
basically our approach to encounter design initially all our lockdowns were traditional wave fights the problem is since the AI teleport in it felt odd without some sort of environmental context like having a portal be an open alarm going off there was also the tedium and chasing down the stragglers in each wave it was clear we needed new encounter types to mix it up and provide additional pacing options the first one we added was incidental combat which allowed us to place enemies and traditional and transitional spaces these served as paced breakers and were one note the second though would come to be the backbone of our fight backbone of our game dubbed arena fights it consisted of a steady stream of AI reinforcements of the encounter never lost momentum we targeted five minutes in three ways for big encounters and the graph below illustrates the difference between the two to further separate this new encounter from wave fights we Institute a policy called last heavy standing now encounters they hinge around heavies so instead of checking of all the AI are dead we simply check of a heavy AI still in play now without some drizzle of minions pacing had severe oscillation this also curtailed players
from and disengaging to scour the arena for pickups 10 max minions felt good with 20 being our cap for a big encounter which about five minutes to incentivize aggression players that went straight for the fiercest combatants could actually end a scenario sooner next we switch to checking the hit points from percentage instead of the traditional on death callback see reinforcements they felt a lot less contrived when new a is didn't appear as soon as the old ones died plus it limited all the potshots you'd get when they were playing there's cool spawn in animations since players tend to finish off a heavy once they have on the ropes this value could be as high as 50% health left we noticed that players felt that fights were over once the last heavy was killed so we actually Zerg rush all the remaining fodder to clean up the encounter ASAP enemy highlight is added for time-sensitive cases like rune trials in arcade mode this did surface a real problem though see we were over relying on the int because the rest of our fodder our former humans and thus unathletic and slow compared to demons in retrospect we really should have had another minion that was agile and had access to the entire traversal sweet now
to limit their occurrence post fight soldiers and zombies were never introduced later than mid fight and we gave them a robust suite of pre combat behaviors and options so that way we really want to encourage the l DS to use them to kick off fights now we really wanted to sell that there was a hierarchy to the demon so we tried teamfights which was our name for encounters composed solely of a single AI type we also tried implementing rules like former humans such as a revenant would never fight alongside cheer demons like the hel night this made sense for Laura but was actually terrible for gameplay C the AI were designed to perform a single role combats designed to juggle a mix battlefield and so is basically like starting a basketball team that's composed solely of centers or point guards the chess pieces we designed these to play well in nearly every space with any combo so level designers can freely experiment to find the fun one of the few restrictions we had was you're never allowed to pair a charger such as the pinky with a chaser like the hell knight and we always had to have a cool-down between melee units bonds the summoner was the most troublesome AI for us because was never
clear whether they create a encounter or they take an existing one and amp it up to 11 they were also so evasive and potentially destructive that you couldn't focus on anything else when they were in play this led us to realize encounter should only have one captain per wave and this captain is then the AI that we're gonna check in last heavy standing finally clever AI placement could create the illusion that an AI has behavior built-in to maximize environment like the IMP in the hangouts but in reality it's all smoke and mirrors my favor was phat Guiana our name for an incubus in a hallway the AI appears more formidable with the snugfit but really the only thing has changed the player doesn't have the same movement options available to counter them with AI pressure was our biggest hurdle to fund this manifested itself and ranged AI have an aggressive melee moves engagement distances that were too close and a misconception that epic fights required epically sized arenas it really took some effort to get everybody on board with the idea that enemies should hold their position and that we can't have multiple male units charging because if you could move two or three
pieces at the same time of chess it would ruin the game ultimately we identified a number of fail conditions for combat chess that we could test where their encounter is working or not players retreat from enemies players post up in a doorway players snipe from a distance and worse players kite enemies around the space we eventually hit a point where the AI properly played their part the arena's had the right scale and flow and the player was fast but under control [Music] a near nickname for the combat loop emerged the dance we called it this because you're always moving there's a lot of lateral and circular motion and there's a natural back-and-forth between you and your partner's the demons now before Drake shows us how all this
actually works I'm going to quickly recap the key components of terms there's push forward combat which is our filter for putting ideas through to judge whether they're doing enough this governs all aspects of the game not just combat we have combat chess which rewards which is our core loop the rewards movement and strategy the pillars of this are speed enemy archetypes unique weapons and power we have chess pieces which are AI roles designed to facilitate very specific player responses we have skate parks which are the arena's that the player improvises and dances in and we have combat puzzles which are couplings of chess pieces to provoke creative problem-solving lastly I just want to thank every dev that contributed to doom past and present it and outside because everything in this presentation result of them and I'm honored to present their work and their learnings with all of you thank you for your time and please remember to fill out the speaker surveys [Applause] ok welcome to part 2 of our talk before
we dive into some implementation details I want to give a little bit of context and there's a little there's a considerable amount of overlap between our two talks but all the points are super important we feel so it's it's it's it's good to hit them you know multiple times so push forward combat is all about the player and what do I mean by that well we really want the player to feel like this right now this this is our latest box art this is not just some you know random image and specifically we want the player to feel like this person right here right the do marine the Demon Slayer he's hell's worst nightmare so our AI aren't just trying to kill you they also need to encourage the player to be the Demon Slayer and that means reinforcing the player's confidence that their actions matter more than anything else now this steam is hugely important to us
so we aren't content to just hope that it happens our systems are engineered to support it and in this talk I'm going to touch on some examples and Kurt has mentioned most of these so just might be a little bit of recap as the Demon Slayer you should always have the confidence to blast into the middle of the fray and take the demons out with your bare hands okay so to encourage this we shifted our view of pain animations and hid reactions to be a tool for the player now you should always feel like movement is a safer option than standing still so to encourage this we forced enemies to miss moving players you should be the one bringing the fight to the ranged enemies and not the other way around so to encourage this we try to keep such units from ever positioning too close to the player you shouldn't ever feel cheated or overwhelmed by an unlucky barrage of too many enemy attacks so to ensure this we make sure there's only a finite number of enemies ever attack at once and finally you should feel like the
center of attention when you want it so we take steps to make sure infighting doesn't ever leave to the player feeling ignored so let's talk about hit reactions the most fundamental behavior of an enemy in a shooter is to react to being shot now the AI in rage had critically-acclaimed pain animations and this is often cited as one of the reasons the AI are so lifelike so we wanted to continue with this tradition but there was one minor critique that most of us had the pain animations played by a charging enemy often took them you know even closer to the player carrying their forward momentum and we kind of wanted it to feel like the player was stopping enemies in the tracks and so this spawned a larger discussion and a previous which Kurt's already shown you but I'm gonna play it again while I speak it was made to showcase some of the new ideas about hit reactions ok the essence of this new approach was to consider hit reactions as a way the
player could manage threats on the battlefield by interrupting and slowing enemies hence we renamed our hit reaction system the threat management system no matter how overwhelming an encounter might seem from the outside a player can dive in and straighten it out with firepower and you might also notice that because the enemies are slow and interrupted the players encouraged to just stroll up to them and finish him off with style now this shift in how we viewed hit reactions emerged as one of the most essential ingredients in push forward combat because we're encouraging this now we started by just slowly working towards what we saw in that previous video and the first step was to organize and use our pain animations according to their impact on gameplay instead of some visual thing now there's a spectrum of hit reactions in a threat management system at one end are the reactions that happen frequently but do not impact gameplay behavior that much while at the other end our reactions that happen rarely but they critically interrupt the ai's combat ability now once we had our
spectrum of animations everything just falls into place we just have to tune the damage stress holds that trigger these reactions and iterate now let me go into a little more detail about what these reactions look like Kurt's already touched on this but I got some different videos so twitches are just additive animations so they don't slower interrupt behavior but as you see they can't interrupt enemy aim falters are the full-body animations that the AI has to play so the player can expect these to interrupt AI behavior and you can keep an AI from being a threat by continually doing it which we call pain lock and this even holds true for characters that are in the middle of leaps push backs and knock downs are the strongest non-cycling hit reactions because of their severity it takes some time for the enemies to recover from this and if the player has the right weapon they can even put every AI in a looping stun State now these
kind of reactions allow you to really rain damage down on the enemy and finally the last hit reaction most enemies play often near the end of their lifecycle is the stagger now this is a daze state right in a cartoon they would have like stars or little birdies you know above their heads and they're just basically asking the player to run up and finish them off at this point so our second step was figuring out the finishing move system and it felt natural to say that if you can daze an enemy with a stagger pain reaction you should be able to just go up and finish them off now it turns out because the AI is not moving much when staggered the base implementation is pretty straightforward it's just pretty much synchronized animations between the participants but through lots of iteration of course we learned that getting the details right is critical to how the system feels for the player so staggered and vulnerable enemies are highlighted with special shaders because in the chaos players weren't getting as much information as we wanted them to you know blue means the guy's vulnerable
yellow means you can do a glory kill on them in this next video I've turned off the highlights and although it may look more realistic the player has little clue which AI are ready to be glory killed and furthermore it's not clear to the player which AI they would glory kill when they press the button if they choose to do so I mean guess you could reasonably expect the system to pick the AI that's kind of like right in front of you but there's always edge cases right and so with a highlight even if the player doesn't understand or agree with the systems choice at least they know what it is ahead of time so you can adjust now we don't have the same level of glory killed variation applied equally to all the AI the fodder tend to have the most animations because you see them the most in the game and it's no coincidence that the interactions with the fodder feel smoother in many cases because in order to minimize view popping when possible the system will pick an animation that targets the limb or body area that the player is looking at now there are other good reasons for limb based glory kills in particular
they're fun and they add lots of variation and their challenge is involved with them but from a polish standpoint the big win is that it reduces the cases of jarring view popping at the start of the animations now the glory kill animations are kept short and sweet because we don't want the player to feel like they're being slowed down so as a general rule we tried to keep the whole sequence shorter than the time it would take to naturally finish off a given enemy that meant for bigger enemies you have a little more time but it should always be faster than if you just shoot them and most importantly we learned that in order for players to really embrace the system they needed to feel relatively safe when doing it even in the most dangerous situations so we made the player invincible up until the release point but even that wasn't enough because since we expect a player to use movement as their primary defense standing still for even a few seconds can be catastrophic we found that even with the immense ability players would often incur huge amounts of damage immediately after a glory kill by virtue of all the
incoming projectiles and attacks that are already in progress on there now stationary position so we added a combat pause AI are prohibited from starting any new attacks while the players in a glory kill let's talk about accuracy we spent a lot of time making the AI capable fighters for example being able to nail moving players with accurate shots but then we decided that giving the AI accurate prediction against moving players ran countered that the goals of push for combat as you've already heard because we want the player to be empowered by movement and feel threatened by standing still our solution is to purposefully miss when the player is moving right simple and AI will miss more often with greater distance as a player moves faster but naively reducing accuracy with something like a random just with a random offset leads to a purely random distribution and for a number of reasons that didn't give us a level of control that we wanted what we wanted was a way to easily specify exactly what the
missed distribution should look like and we ended up using a curve to define that distribution so it's easy to plot a distribution as a curve you know you can just imagine that the height is the density but how do you go from a curve back to a distribution well if you imagine random samples being taken from anywhere under this curve the x value of those samples if you project it down ends up being the very distribution that would have been plotted as the curve well how do we use this concept we discretize the curve into slices where the height of each slice is the Y value of the curve halfway between X values at a slice like this then we normalize the areas of the slices and conceptually you can think of this as let laying the slices on their sides like that and by normalize I mean we take the value between 0 and 1.0 then we pick a random number in this case 0.2 - now look point two two lies on the
number line in the normalized area of slice D so then we look at the actual extents of slice D on the original curve and we see that it's 0.4 to 0.5 that's probably too small for you to see but just take my word for it then we call a second Rand with those two values to give a little bit localized variation and if we did this like a million times the samples would approximate the intended distribution that's under the curve now our curves are asymmetric because we mirror the distribution on both sides of a player an example of how this looks I forced this sim to miss me even at a crawl so there's a hit you see the screen affects every other throw is a Miss this method allows us to easily alter the desired distribution for different difficulty levels for example this is the curve that we use on hard okay looks a little bit similar but note that on this hard curve there's a non-zero value in the first slice which means that the AI are actually going to attempt to hit the player more than uneasy let's talk about
positioning we want the AI to stand in the open as much as possible because that's where the player can shoot them and obviously range they I need to stand where their attacks will be able to hit the player but in its simplest form the desire for visibility to the player what's causing problems what do I mean well here this imp can't see the player right a common way to get such ranged AI into visibility is to simply have them move towards the player because we know that if the improves along the path to the player at some point he'll gain visibility when he comes around the last corner but what if the player decides to move forward at the same time the imp and you are gonna meet face to face now it's not as if this is a horrible situation because the imp is not the strongest character but we want the player to be the one bringing the fight to the enemies especially the smaller characters like imps and soldiers so range units need to maintain some distance if possible now in cover shooters this is not a problem because
cover point systems are built around the idea of positions that can fire on the player so all the AI code has to do is pick a valid cover point and go there well it turns out there's some cover shooter blood in the ad family rage now cover positions in rage also measured occlusion from the player right that means they're good cover so if you place one out in the open cover seeking a I would never actually use it for the obvious reason that it didn't offer actual cover now we tried the extremely simple test of flipping the desired occlusion values from positive to negative numbers making the AI desired positions where they were completely exposed instead of completely protected and it worked and so henceforth range fired positions in Doom have been known by the silly term exposed cover I'm not joking that's what we call them now there's one big difference between cover and the opposite of cover and anti cover you know cover typically typically converges on single points or small
areas that the AI stick to and it has a well-defined direction anti cover can be a large portion of any map space and it typically has no direction so to make this larger area work with the same kind of discreet positioning choices a cover system uses we treat exposed cover positions as a tether point and while tethered the AI are then free to make local direction and positioning choices as I see fit now how do the AI know to consider a tether point good or not well whereas many cover systems use precomputed visibility doom uses a runtime algorithm might call a bunch of traces the basics of the algorithm are this generate a grid of sample points within each other area and then just do traces from the sample points to the target and you keep a running average of what fraction of those points can see the player in this case that Teta point only has 30% visibility to the target now why use traces instead of pre computed
visibility well because a naive approach like this is super simple it's super usable and it's super debuggable it just automatically works with anything in the game that has collision even dynamic objects and other characters and it operates on the same level of collision detail that weapons traces sensory traces and projectile traces and everything else operate on and you don't need that many traces ok this clip shows the overall visibility of each tether point coming from all the sample points there owns as they're updated so did the previous clip now at 60 frames per second only 24 traces per frame is 1400 traces per second and if you cleverly manage which positions have their visibility updated the entire combat space will be refreshed quickly and just to prove it I made this video with the limit decrease to 12 traces per frame and then this one had only 6 traces per frame and you see it even only 6 traces per frame the tether points are updating at just over once a second in a pretty big combat space and that's not great
but it still gives the AI useable info now this is one trace for frame and I admit that is much too slow but at least it proves that the system is working right let's talk about attack cooldowns we design attacks with the goal that the player will be able to focus on an enemy and understand their intent by reading visual effects and animation cues this goal starts to break down when two many enemies independently decide to attack at best it looks silly at worst the players overwhelmed by volleys of attacks that have no rhythm or predictability now an obvious solution is to simply limit how many a I can attack simultaneously our specific implementation as a token system the concept is extremely simple if an AI wants to do certain attacks they need a token for it now here are the same setups with tokens turned on if there are only X tokens of a certain type then those behaviors can only be done by X AI
at a time in the game every other AI must find something else to do such as executing a lesser attack of which there are more tokens repositioning or just playing a taunt so they don't look like they're idle so if an AI wants to execute an attack they first request a token if one is not available they have to do something else if one is available they then acquire it and then they're going to hold on to or use that token for the duration of the attack and once they release it back to the token pool they can have a cool-down on that token before it can be acquired again by anybody even themselves this is an easy way to enforce global attack cooldowns the different difficulty levels have different token counts this is a crowd of imps on easy difficulty and the goal is to allow for more simultaneous attacks at higher difficulty levels so here's the same group of imps on ultra hard as you see on altra hard there are more tokens available instead of one-on-one you've got two and three thus
there are more ni attacking token usage is also not completely set in stone in this video AI marked with a cyan sphere are allowed to steal a token why well suppose in this image there are only two attack tokens and the imps in green already have them the AI immediately in front of the player marked in blue are going to look silly if they can't attack so we allow AI to steal a token in such cases and attack anyway now let's jump to the other side of the fence and talk about the problem of AI not actively engaging the player when they should we wanted to support lots of infighting between the demons it's a loved and well remembered feature from the original doom games and it adds a ton of personality to the enemies but remember that put forward combat is a celebration of the player so when a player is playing a part of the aggressor the AI need to be smart enough to focus on their true enemy the Demon Slayer and to manage this easily we
needed more than a traditional faction system I take a drink of water real quick it apologized so what is a traditional faction system the typical implementation is to have a goodwill value that was basically like how they feel about someone right and it says increased or decreased in response to agent actions in the world for example each time an AI is hit with like accidental friendly fire for suppose the goodwill value might be reduced after two such events the goodwill value might cross a threshold into annoyed right and then maybe with another hit it reduces to angry war if the AI is hit intentionally the goodwill value is reduced by a larger amount and it immediately dips below the angry threshold now this works out well until we want to know why the AI is angry was it from three accidental hits or was it
from a single intentional hit or was it some combination thereof or was it from an entirely different series of events you know there is no way to know without adding more code to track all that extra stuff I know we actually went through this process starting with one or a few goodwill values and adding more and more custom code and bolt-on functionality as we needed more control eventually all that custom code became the most complex part of the faction system and so we decided to just rethink the underlying approach and we turned it into something built to be extensible from the start a rule-based system that operates on records of everything of interest that has happened to the AI in the past now here I've highlighted records representing accidental and intentional damage to one AI by another and one example of a rule might be if members of the in faction have damaged anyone on my faction even accidentally three or more
times in the last eight seconds then I should feel angry towards the IMP faction and in this case the rule evaluates to true go back eight seconds in the past there's your three accidental damages and so the AI will feel angry against imps and if multiple rules evaluate to true we just take the one that produces a strongest response now to make it easy to manipulate the data we specify everything with a single graph that defines both the inheritance of rules among a family of factions as well as the rules themselves between the factions what do I mean at runtime to evaluate the relationships between two factions for example how a hell knight should feel about a plasma soldier we do this alright first we follow each factions inheritance chain up to where they diverged from the first shared parent I will show you where is the hell Knight there's a hell knight faction the hell my faction is a child of the heavy faction and a heavy faction is a child
of the demon faction plasma guys over here he's a child of the hella fied faction who is a child of the UAC faction and then once we have these two chains we gather all the rules specified in the edges between any of the factions and either of those chains like this we can catenate all those rules into a single list and then we just evaluate that entire set against the entire set of event records that we have and the results are pretty good infighting is everywhere you can get the AI fighting each other and almost every single encounter in the game by just encouraging friendly fire incidents while running from pursuing enemies and they will very quickly return to going after you instead if you do something that warrants their attention including just getting too close to them and what you do to them will influence how long they go after you before possibly returning to fighting there well they're not their friends anymore but the other demons so we're basically ensuring that in fighting really only
influences a battle if the player is actively trying to let it happen in conclusion we put a lot of thought and effort into bringing the player closer to this image and this is the second time I've concluded a talk with a video of me beating up on the AI in this case because it showcases just how dominating the do Marine is intended to be now as an AI developer it's tempting to get caught up in the idea that my creations should do whatever they can to kill the player but for most games and doom especially that just doesn't lead to a great player experience you know delivering a great player experience is really the true point of our job and that goes for everybody in industry I think I want to thank everyone and ZeniMax like Curt said without their talents and support none of this would be possible I want to thank everybody at GDC for putting on a great conference this year and finally I want to thank everybody in the room for coming out to listen we really appreciate it if anybody has questions we'll stick
around afterwards and we'll even be in the question rooms after that please do not forget to fill out your session feedback email from GDC [Applause]
Auto-generated captions from YouTube — names and numbers may be misheard.
Game Developers Conference · 2026
Comments