Presentation on theme: "Managing Complexity in the Halo2 AI Damián Isla Bungie Studios."— Presentation transcript:
Managing Complexity in the Halo2 AI Damián Isla Bungie Studios
Managing Scalability in the Halo2 AI Damián Isla Bungie Studios
Why Scalable AI? More is BETTER The brute force approach to common sense: the more unique situations you can recognize and react to, the more common-sensical you are. (e.g. Cyc, OpenMind projects)
Variation 3 Dimensions of Scalability Variety Volume drive the warthog Shoot the needler melee attack fight perch hide boarding Strafe target heretic grunt elite major flood swarms hunters hell-jumpers brute captain Miranda sniper marine DRAMA! pacing story challenge
The Ultimate Goal Designer I want X to do Y whenever Z! Engineer Okay. (To himself) Hmm … and I know exactly where to put that … Designer Im happy now. (Trundles back to design-bubble)
AI Design Requirements Transparency –Facilitate the ongoing narrative in the players head Coherence –Focused action, right priorities Directability –For the designer Workability –For the engineer See [Butcher & Griesemer] GDC 2002
Managing Scalable Decision- Making in the Halo2 AI Damián Isla Bungie Studios
Behaviors Behavior: a program that takes temporary control of the actor in order to get something done Behaviors are action over time: Move to a point Orient Shoot Crouch Play dialogue Trigger actions Behaviors have notion of relevancy and duration e.g., Fight Vehicle entry Throw grenade Find cover Cover friend Check body Wake up a sleeping grunt Etc. Halo2: ~130 in total
The Combat Cycle
Decision-Making Behavior Tree (or DAG) Good Intuitive Modular Scalable Bad Never really that simple Debugging is hard Memory is hard
Decision routines Child-competitive strategies Analog Relevancy Binary Relevancy –Prioritized-list (root, engage) –Sequential –Sequential-looping (search) –Randomized –One-off randomized (postcombat) Design Principle #1 : Given A, B or C, always choose D (all of the above)
Impulses Problem: What happens (with a prioritized list) when the priority is not constant? Unless the player is in vehicle, in which case...
Impulses Solution: Separate alternative trigger conditions out into separate impulse Two execution options In-place Redirect Design Principle #2 : Formalize complexity (dont hide it)
Impulses The other purpose of impulses: HACKS Or, localized code with ad-hoc Functionality e.g. crouch_on_danger impulse dive impulse Design Principle #3: Embrace the hackery
Behavior Metadata Problem: In determining relevancy, we check the same conditions over and over and over and over –Actors vehicle status (infantry, driver, passenger) –Actors alert status (idle, in combat, visible target) Solution: Use metadata to describe execution conditions –Force all behaviors to declare their execution conditions –Halo2: conditions bitvector compared to actual state bitvector Acts as a behavior/impulse mask (modifying the basic structure of the tree itself)
Custom Behaviors Problem: character-type specific behaviors –Dont want all characters evaluating behaviors that only one type can do –E.g. grunts retreat from scary enemy impulse Solution: attach custom behaviors to tree Design Principle #4 : Variation from a stable base
Stimulus Behaviors Problem: rare event-driven behaviors tested for every tick e.g., Grunts flee when their leader dies Solution: Stimulus Behaviors Behaviors or impulses dynamically and asynchronously placed into tree at specified location Actor Died 1 sec.
Joint Behaviors Remember Design Principle #1! (always choose D, all of the above)
Behavior Summary Behavior DAG Binary decision routines Impulses Metadata Custom Behaviors Stimulus Behaviors Joint behaviors The behavior tree is fundamentally a DYNAMIC structure!
Memory and Memory Problem: Persistent behavior state is impossible (too much data to keep around!) Solution: Only keep around state for behaviors that are running Problem: What about state we need to keep around regardless of whether were running the behavior or not? (e.g. last grenade-throw time)
The Anatomy of Memory Store memory as… Behavior state (short-term) Persistent per-behavior Persistent per-target Props are also Perception caches Our knowledge model …memory is a complicated thing. Props
The Anatomy of Memory e.g. Search Aquire target 1 Lose sight of target 1 Search target 1 –Last known location inspected –New search point selected Aquire target 2 –Search deactivated, short-term state discarded Target 2 killed Switch to target 1 Search target 1 –Where do we search? –Existing search point used Remember Design Principle #2 (formalize complexity, dont hide it)
Designer Direction Character definition –Model, animation graph –Behavior parameters –Static control Level-scripting –Dynamic Control Variety Variation
Static Control: Variety Character types –Elites –Grunts –Marines Variants –Gold elite –Red elite –Honor guard elite –Jetpack elite Each variant gets a.character definition file A LOT of parameters to author and maintain! 64(variants) x 80 (behaviors/variant) x 3 (parameters/behavior) = 15,360
Static Control: Parameters Character files divided into parameter blocks –Vitality properties –Perception properties –Search properties –Weapon usage –Etc. Blocks can be instantiated or not Hierarchy: children characters instantiate only significant variations from parent Root of tree is the generic character, which provides reasonable values for all parameters Remember Design Principle #4! (Variation from a stable base)
Static Control: Styles Styles are cool: Behavior mask Bias control parameters Superposable (Another reason why Impulses are great)
Dynamic Control: Organization Halo1: Encounters –Groups of actors –Groups of areas Problem: moving actors from one encounter to the next was architecturally discouraged Halo2: Squads –Groups of actors Zones –Groups of areas Orders –A mapping between the two
Dynamic Control: Orders The Metaphor: Take that hill! Hole up in that bunker! Or Occupy this space and behave this way! Position direction Behavior direction
Blah blah blah
Orders and Behavior Behavior direction Vehicle behaviors enabled/disabled Active camouflage enabled/disabled Follow player enabled/diabled Rules of engagement Style –Behavior mask –Bias control parameter Alright, men, engage active camouflage and move forward cautiously. And dont open fire until the Master Chief does!
In summary Design Principle #5 : Work with your representations
Recap Design Principles: 1.Always choose D (all of the above) 2.Formalize complexity (dont hide it) 3.Embrace the hackery 4.Variation from stable base 5.Work with your representations
Technical Takeaways Dynamic behavior tree Binary relevancy Behavior masking Principled approach to memory Take smarts out of the behavior and put it in the knowledge model
Conclusions All systems need to play ball with the core decision mechanism Not looking for smart architecture, looking for expressive architecture
The Ultimate Goal Designer I want X to do Y whenever Z!