250 likes | 431 Views
The Gym: Where The Incredible Hulk Goes To Train. Bryan Brandt Lead Gameplay Programmer bbrandt@radical.ca. Kevin Coughlan Technical Director kcoughlan@radical.ca. What’s This All About?. One tool, one system for: Character mechanics Enemy behaviour Mission scripting Intended Audience:
E N D
The Gym:Where The Incredible Hulk Goes To Train Bryan Brandt Lead Gameplay Programmer bbrandt@radical.ca Kevin Coughlan Technical Director kcoughlan@radical.ca
What’s This All About? • One tool, one system for: • Character mechanics • Enemy behaviour • Mission scripting • Intended Audience: • Gameplay & Tools Programmers • Technical Artists & Animators • Designers & Scripters
Session Overview • The Incredible Hulk: Ultimate Destruction • The Gym • Demos and Details • Successes and Pitfalls • Conclusion
Introductions: Radical Entertainment www.radical.ca • Founded in 1991, 25+ titles published, 230+ employees, based in Vancouver, BC, Canada • Acquired in March 2005 by Vivendi Universal Games • Recent hits: • Simpsons Road Rage • The Hulk • Simpsons Hit and Run • Crash: Tag Team Racing • The Incredible Hulk: Ultimate Destruction (IHUD) • Scarface (coming in 2006)
The Incredible Hulk: Ultimate Destruction • GameRankings: 85.2% • Very little overtime! • ~24 months of development • ~35 people Critical success with no death march < IHUD video >
The Challenge • Character mechanics • 150 different moves for Hulk alone • Enemy behaviour • 18 enemy types • Mission scripting • 25+ story missions • 40 challenge missions
Our Solution: The Gym • Game logic editor
Fight Trees • Fight trees are decision trees and state machines • Types of fight trees in IHUD • Motion tree : character mechanics • AI tree : enemy behavior • Scenario tree : mission scripting
Motion Tree • Character mechanics • Locomotion • Simple Attacks • Picking up objects of various types • Attacking with objects • Weaponizing • Grapples • Reactions to getting hit • One motion tree for each character type • 20 different motion trees in IHUD
Demo #1: Adding an attack Conditions attacks buttonPress( Punch ) 1 Tracks animation( right_hook ) collision
Components of a Fight Tree • Branches • Conditions • Tracks
Branches • Branches are typically • Banks • Nodes • Hulk’s motion tree: • 750+ banks, 1600+ nodes
Conditions “Fight Trees are decision trees” • Each branch contains a list of conditions • Conditions evaluate to true or false • 200+ types of conditions • Button pressed / held / released • Prop is being held • Randomizer • Evaluate a Lua expression • Operators: and, or, not
Tracks “Fight Trees are state machines” • Nodes represent a state • Nodes contain a list of tracks • Each track describes an action to be performed • 230+ types of tracks • Play an animation • Play a sound • Display a special effect • Test for collision • Conditionally transition to another node • Run a Lua script
How Does It Work? • Querying • Evaluate tree conditions depth-first for a node that will become the next state. • Execution If a node is found, run it! • Node execution stops when either: • All its tracks are finished running. • A new node has been queued for execution.
1 2 2 Demo #2 – Combo Conditions attacks buttonPress( Punch ) Tracks animation( uppercut ) animation( right_hook ) collision opportunity( )
AI Tree • Goal: Scripted, state-based enemy behaviour • Sample decisions: • Pursue target if too far away • Engage target when in range • Attack target when it’s my turn • Solution: Use existing fight tree system
Scenario Tree • Goal: Event-driven mission scripting • What’s a mission? • Free roaming • 25+ Game missions • 40 Challenge missions • What’s an event? • actor death, object pick-up / drop / destruction, trigger volume enter / exit, path waypoint traversal, etc. • Solution: Use existing fight tree system • But with minor tweaks!
How Did We Make It Work? • Querying • When an event is generated, query the tree for allnodes that match the event conditions. • Often more than one event per frame • Execution Run each node concurrently
Demo #3: Scenario Tree Conditions event( Prop - Destroyed ) event_PropType( bus ) Tracks lua( “x = x + 1 hud_Message( x )” )
Successes • Cross-disciplinary tool • Ease of iteration • Fast prototyping • Build on what you’ve got!
Pitfalls • Multi-user issues • Instability • Communication between trees • UI bloat
Conclusion • One tool, one system for: • Character mechanics • Enemy behaviour • Mission scripting We couldn’t have made IHUD without it!
Bryan Brandt bbrandt@radical.ca Kevin Coughlan kcoughlan@radical.ca Questions? Also check out: Harnessing Hulk: Controls, Motion, Gameplay! Eric Holmes, Bryan Brandt Thursday, 5:30pm — 6:30pm