1 / 96

Applying Blackboard Systems to First Person Shooters

Applying Blackboard Systems to First Person Shooters. Jeff Orkin Monolith Productions http://www.jorkin.com. No One Lives Forever 2: A Spy in H.A.R.M.’s Way. aka NOLF2 A.I. Systems re-used: TRON 2.0 Contract J.A.C.K. No One Lives Forever 2: A Spy in H.A.R.M.’s Way. Agenda.

lowri
Download Presentation

Applying Blackboard Systems to First Person Shooters

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Applying Blackboard Systems to First Person Shooters Jeff Orkin Monolith Productions http://www.jorkin.com

  2. No One Lives Forever 2:A Spy in H.A.R.M.’s Way • aka NOLF2 • A.I. Systems re-used: • TRON 2.0 • Contract J.A.C.K.

  3. No One Lives Forever 2:A Spy in H.A.R.M.’s Way

  4. Agenda • Blackboards are wicked cool. • What is a blackboard? • Inter-agent coordination • Intra-agent coordination

  5. What if there was an architecture that… • …was simple to implement. • …was flexible & maintainable. • …handled coordinated behavior: • Coordinated timing of behaviors. • Coordinated pathfinding. • Coordinated tactics.

  6. But wait! There’s more! • …simplifies agent architecture. • …reduces code bloat. • …facilitates AI LOD system. • …facilitates variations, re-use, and sharing. • …allows complex reasoning.

  7. Blackboards: the magical animal Homer: “What about bacon?” Lisa: “No!” Homer: “Ham?” Lisa: “No!” Homer: “Pork chops?!?” Lisa: “Dad! Those all come from the same animal!” Homer: “Yeah right Lisa. A wonderful magical animal.”

  8. What is a blackboard?

  9. A blackboard is a metaphor • Physical blackboard • Publicly read/writeable. • Possibly organized. • Maybe more like a bulletin board • Post requests and information. • Respond to items of interest.

  10. A blackboard is shared memory • Read/write memory • Working memory • Like a hard-drive • Like a database • No processing (other than sorting)

  11. A blackboard is a means of communication • Centralized communication • Agents communicate • Sub-systems of an agent communicate

  12. A blackboard is an architecture • Changes how agents and/or sub-systems interact • Like an interface • Reduces coupling of sub-systems

  13. Blackboard implementation • There’s no wrong way to eat a blackboard. • Two flavors: • Static • Dynamic

  14. Static blackboards class CBlackboard { private: Vector m_vPos; Vector m_vVelocity; int m_nHealth; // etc… public: // access functions… };

  15. Static blackboards (cont.) • Predetermined data to share. • Static amount of data. • Best for intra-agent coordination.

  16. Dynamic blackboards struct BBRECORD { … }; typedef std::vector<BBRECORD*> BBRECORD_LIST; class CBlackboard { private: BBRECORD_LIST m_lstBBRecords; public: // query functions… };

  17. Dynamic blackboards (cont.) struct BBRECORD { ENUM_BBRECORD_TYPE eType; HANDLE hSubject; HANDLE hTarget; float fData; };

  18. Dynamic blackboards (cont.) enum ENUM_BBRECORD_TYPE { kBB_Invalid = -1, kBB_Attacking, kBB_Crouching, kBB_NextDisappearTime, kBB_ReservedVolume, // etc… };

  19. Dynamic blackboards (cont.) // query functions int CountRecords( ENUM_BBRECORD_TYPE eType ); int CountRecords( ENUM_BBRECORD_TYPE eType, HANDLE hTarget ); float GetRecordData( ENUM_BBRECORD_TYPE eType ); float GetRecordData( ENUM_BBRECORD_TYPE eType, HANDLE hTarget );

  20. Dynamic blackboards (cont.) • Data to share is not predetermined. • Dynamic amount of data. • Best for inter-agent coordination. • Also useful for intra-agent complex reasoning.

  21. Inter-agent Coordination Using a blackboard to solve coordination problems on NOLF2.

  22. Inter-agent Coordination Problems • Agents doing the same thing at the same time. • Agents doing things too often. • Special constraints for tactics. • Agents take same paths. • Agents clump at destinations.

  23. NOLF2 Blackboard • Add Records: • Enumerated type • Subject ID • Optional Target ID • Optional float data • Remove Records: • Specific by type and Subject ID • All by type • Replace Records

  24. NOLF2 Blackboard (cont.) • Query: • Count matching records • Retrieve data from matching records

  25. Problem #1: Agents doing same thing at same time Examples: • Soldiers Crouching • Random chance of crouch • Dodge roll into crouch • Crouch to get out of firing line • Ninja Lunging

  26. Blackboard Solution: Agents doing same thing at same time Should I crouch? if( g_pAIBB->CountRecords( kBB_Crouching ) == 0 ) { // Crouch… g_pAIBB->AddRecord( kBB_Crouching, m_hObject ); }

  27. Problem #2: Agents doing things too often Examples: • Soldiers going Prone • Ninja Disappear-Reappear • Combat/Search sounds

  28. Blackboard Solution: Agents doing things too often Should I go prone? if( fCurTime > g_pAIBB->GetRecordFloat( kBB_NextProneTime ) ) { // Go prone… g_pAIBB->ReplaceRecord( kBB_NextProneTime, m_hObject, fCurTime + fDelay ); }

  29. Problem #3: Tactical behavior has special constraints Example: • Ninja only attacks from a rooftop if two other ninja are already attacking on ground, and no one is on a roof.

  30. Blackboard Solution: Tactical behavior has special constraints Should I attack from the roof? if( g_pAIBB->CountRecords( kBB_AttackingRoof, m_hTarget ) > 0 ) { return false; }

  31. Blackboard Solution: Tactical behavior has special constraints (cont.) if( g_pAIBB->CountRecords( kBB_Attacking, m_hTarget ) < 2 ) { return false; } // Attack from the roof… g_pAIBB->AddRecord( kBB_Attacking, m_hObject, m_hTarget ); g_pAIBB->AddRecord( kBB_AttackingRoof, m_hObject, m_hTarget );

  32. Problem #4: Agents take same paths Example: • Player runs around the corner, and characters follow in a congo line and get killed one by one.

  33. Problem #4: Agents take same paths (cont.) NOLF2 AIVolume system:

  34. Problem #4: Agents take same paths (cont.) NOLF2 AIVolume system:

  35. Problem #4: Agents take same paths (cont.) NOLF2 AIVolume system:

  36. Problem #4: Agents take same paths (cont.) NOLF2 AIVolume system:

  37. Problem #4: Agents take same paths (cont.) NOLF2 AIVolume system:

  38. Blackboard Solution: Agents take same paths Volume reservation system: • Reserve the Volume before the destination. • Reserved Volume Cost == Cost + 500

  39. Blackboard Solution: Agents take same paths (cont.) Volume reservation system:

  40. Blackboard Solution: Agents take same paths (cont.) Volume reservation system:

  41. Blackboard Solution: Agents take same paths (cont.) Volume reservation system:

  42. Blackboard Solution: Agents take same paths (cont.) // Pathfinding if( g_pAIBB->CountRecords( kBB_ReservedVolume, hVolume ) > 0 ) { fNodeCost += 500.f; }

  43. Blackboard Solution: Agents take same paths (cont.) // Movement g_pAIBB->RemoveRecord( kBB_ReservedVolume, m_hObject ); g_pAIBB->AddRecord( kBB_ReservedVolume, m_hObject, hVolume );

  44. Problem #5: Agents crowd at destination Examples: • Player knocks over a bottle. Characters converge on bottle position. • Characters discover dead body and converge.

  45. Blackboard Solution: Agents crowd at destination • First agent claims volume for investigation. • Other agents stop at edge of volume.

  46. Blackboard Solution: Agents crowd at destination (cont.)

  47. Blackboard Solution: Agents crowd at destination (cont.)

  48. Blackboard Solution: Agents crowd at destination (cont.)

  49. Blackboard Solution: Agents crowd at destination (cont.) // AI reached the dest volume first. if( g_pAIBB->CountRecords( kBB_InvestigatingVolume, hVolume ) == 0 ) { g_pAIBB->AddRecord( kBB_InvestigatingVolume, m_hObject ); } // AI did not reach the dest volume first. else { // Look at dest. }

  50. Einstein says… “Hang in there, we’re half-way done!”

More Related