cs 387: game aisanti/teaching/2017/cs... · the other only ode, this layer would define an api that...
TRANSCRIPT
![Page 1: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/1.jpg)
CS 387: GAME AI INTRODUCTION TO GAME AI
4/6/2017 Instructor: Santiago Ontañón
[email protected] Class website:
https://www.cs.drexel.edu/~santi/teaching/2017/CS387/intro.html
![Page 2: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/2.jpg)
Outline • Game Engines • Perception and Action
![Page 3: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/3.jpg)
Outline • Game Engines • Perception and Action
![Page 4: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/4.jpg)
Game Engine Architecture • Composed of a set of layers, each one of them providing
higher and higher-level functionality (not unlike a regular OS)
• Can be very simple of very complex
• In addition to the run-time (the code that runs when the game is being played), game engines typically include content authoring tools (level editors, script editors, etc.)
![Page 5: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/5.jpg)
![Page 6: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/6.jpg)
Game Engine Architecture
HARDWARE
DRIVERS
OS
SDKs
Platform Independence Layer
Utility Layer
Resource Management
Game Engine Functionalities
Game Specific
Game Engine (e.g., Unity)
Dependencies
![Page 7: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/7.jpg)
Game Engine Architecture
HARDWARE
DRIVERS
OS
SDKs
Platform Independence Layer
Utility Layer
Resource Management
Game Engine Functionalities
Game Specific
Game Engine
Dependencies
![Page 8: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/8.jpg)
SDKs • Typically used:
• Data Structures: STL, Boost, Loki • Graphics: OpenGL, DirectX • Animation: Havoc, Edge, Granny, Euphoria • Sound: OpenAL • Physics: ODE, Havoc, PhysX • … (add your favorite library here)
![Page 9: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/9.jpg)
Game Engine Architecture
HARDWARE
DRIVERS
OS
SDKs
Platform Independence Layer
Utility Layer
Resource Management
Game Engine Functionalities
Game Specific
Game Engine
Dependencies
![Page 10: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/10.jpg)
Platform Independence Layer • Layer that offers the functionality of all the libraries below
in a platform independent way. • For example:
• If coding a game for 2 platforms, where one only allows Physx, and the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath
• There are many existing platform independence layers available for graphics, sound, etc. • A popular C++ one is SDL (Simple Directmedia Layer) with
abstractions for: Graphics, sound, keyboard, mouse, network, threading, etc.
![Page 11: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/11.jpg)
Game Engine Architecture
HARDWARE
DRIVERS
OS
SDKs
Platform Independence Layer
Utility Layer
Resource Management
Game Engine Functionalities
Game Specific
Game Engine
Dependencies
![Page 12: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/12.jpg)
Utility Layer • Set of basic functionalities, not provided by any of the
linked SDKs, and that are required by the game engine. • Typically:
• Memory management: standard memory allocation might not be fast enough for a game engine, custom memory allocation routines are typical.
• Math: basic set of functions for geometry, trigonometry, quaternion, matrix, equation solving, numerical integration, etc. as needed by the game engine.
• Data structures: trees, graphs, etc. (anything not supported by STL, Boost, etc. that the engine needs)
• Algorithms: search, sort, etc. • Random number generation (if standard does not satisfy needs) • File parsers (XML, etc.) • Configuration
![Page 13: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/13.jpg)
Game Engine Architecture
HARDWARE
DRIVERS
OS
SDKs
Platform Independence Layer
Utility Layer
Resource Management
Game Engine Functionalities
Game Specific
Game Engine
Dependencies
![Page 14: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/14.jpg)
Resource Management (Assets) • Most games require assets (bitmaps, 3D models, maps,
sounds, etc.) • The game engine should provide functionality to load/save/
create/query assets such as: • 3D models:
• Meshes • Textures/Materials • Skeletons • Animations
• 2D models: • Bitmaps • Skeletons • Animations
• Fonts • Maps • Sound files • Collision resources (collision shapes)
![Page 15: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/15.jpg)
Game Engine Architecture
HARDWARE
DRIVERS
OS
SDKs
Platform Independence Layer
Utility Layer
Resource Management
Game Engine Functionalities
Game Specific
Game Engine
Dependencies
![Page 16: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/16.jpg)
Game Engine Functionalities • Most complex layer of the game engine, composed of
multiple sub-systems
Rendering Engine
Animation Engine
Collisions
Physics Audio Subsystem
Online Multiplayer
Profiling & Debugging
Gameplay Foundations (Game State, Game Flow)
Artificial Intelligence Scripting
![Page 17: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/17.jpg)
Game Engine Functionalities • Most complex layer of the game engine, composed of
multiple sub-systems
Rendering Engine
Animation Engine
Collisions
Physics Audio Subsystem
Online Multiplayer
Profiling & Debugging
Gameplay Foundations (Game State, Game Flow)
Artificial Intelligence Scripting Graphical rendering of the game. It can be very
complex, and also subdivided in a collection of layers: • Low-level renderer: materials, lighting, camera,
text, primitives, viewports, etc. • Scene drawing: culling, Level-of-detail (LOD),
scene subdivision • Visual effects: particle systems, shaders, post
effects, etc. • Front end: HUD, GUI, menus, etc.
![Page 18: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/18.jpg)
Game Engine Functionalities • Most complex layer of the game engine, composed of
multiple sub-systems
Rendering Engine
Animation Engine
Collisions
Physics Audio Subsystem
Online Multiplayer
Profiling & Debugging
Gameplay Foundations (Game State, Game Flow)
Artificial Intelligence Scripting
It is in charge of playing skeletal animations, interacting with the physics of the game engine. Might also trigger sound effects (requests sent through gameplay foundations).
![Page 19: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/19.jpg)
Game Engine Functionalities • Most complex layer of the game engine, composed of
multiple sub-systems
Rendering Engine
Animation Engine
Collisions
Physics Audio Subsystem
Online Multiplayer
Profiling & Debugging
Gameplay Foundations (Game State, Game Flow)
Artificial Intelligence Scripting Run physics simulations taking
collisions and animations into account. Forces, constraints, etc.
Detecting collisions points, surfaces and directions between complex objects using the functionalities of the lower layers.
Play sounds: depending on distances, walls, relative velocities, etc. (volumes, panning, Doppler effects). Fading in/out music, dynamic music, etc.
![Page 20: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/20.jpg)
Game Engine Functionalities • Most complex layer of the game engine, composed of
multiple sub-systems
Rendering Engine
Animation Engine
Collisions
Physics Audio Subsystem
Online Multiplayer
Profiling & Debugging
Gameplay Foundations (Game State, Game Flow)
Artificial Intelligence Scripting
Some game engines allow the attachment of scripts to each asset (models, animations, maps, etc.) in a high-level language (e.g. Lua). The game engine needs an interpreter/compiler that runs those scripts.
![Page 21: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/21.jpg)
Game Engine Functionalities • Most complex layer of the game engine, composed of
multiple sub-systems
Rendering Engine
Animation Engine
Collisions
Physics Audio Subsystem
Online Multiplayer
Profiling & Debugging
Gameplay Foundations (Game State, Game Flow)
Artificial Intelligence Scripting
Focus of this class
Game state replication, and policy for coherent state maintenance. Match-making, messaging (not message rendering, just message sending/reception), etc.
![Page 22: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/22.jpg)
Game Engine Functionalities • Most complex layer of the game engine, composed of
multiple sub-systems
Rendering Engine
Animation Engine
Collisions
Physics Audio Subsystem
Online Multiplayer
Profiling & Debugging
Gameplay Foundations (Game State, Game Flow)
Artificial Intelligence Scripting
Core of the game engine, location of the “Game Loop”, also maintains the game state. Location of the “game flow” FSM (transition from menus to game, to game over, etc.)
![Page 23: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/23.jpg)
Game Engine Architecture
HARDWARE
DRIVERS
OS
SDKs
Platform Independence Layer
Utility Layer
Resource Management
Game Engine Functionalities
Game Specific
Game Engine
Dependencies
![Page 24: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/24.jpg)
AI Interface with the Game Engine
Rendering Engine
Animation Engine
Collisions
Physics Audio Subsystem
Online Multiplayer
Profiling & Debugging
Gameplay Foundations (Game State, Game Flow)
Artificial Intelligence Scripting
![Page 25: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/25.jpg)
AI Interface with the Game Engine
Collision
AI
Gameplay Foundations (Game State, Game Flow) Input Game
State
![Page 26: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/26.jpg)
AI Interface with the Game Engine
Collision
AI
Gameplay Foundations (Game State, Game Flow) Input Game
State Game State Information
Collision data (what touches
what, or is in the line of fire of
what)
AI actions (might or not be the same
as the human player’s)
![Page 27: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/27.jpg)
AI Interface with the Game Engine
Collision
AI
Gameplay Foundations (Game State, Game Flow) Input Game
State
World Interface
(perception)
Strategy
Decision Making
Movement
![Page 28: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/28.jpg)
Example: RPG Game • Consider Morrowind (Elder Scrolls III)
![Page 29: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/29.jpg)
Example: RPG Game
Game State
Collision +
Line of sight
Input
AI
Perception: • Navigation
mesh • Quests’
status • Interaction
events (hits, etc.)
Strategy
Decision Making: Scripts
Movement: A* + Animation
![Page 30: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/30.jpg)
Example: RPG Game
Game State
Collision +
Line of sight
Input
AI
Perception: • Navigation
mesh • Quests’
status • Interaction
events (hits, etc.)
Strategy
Decision Making: Scripts
Movement: A* + Animation
In some games (e.g. Spore) animation is so complex, that it is
considered part of the Game AI (we will not cover animation techniques
in this course)
![Page 31: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/31.jpg)
Example: RPG Game
Game State
Collision +
Line of sight
Input
AI
Perception: • Navigation
mesh • Quests’
status • Interaction
events (hits, etc.)
Strategy
Decision Making: Scripts
Movement: A* + Animation
For the triggers and conditions used in the scripts (basically, we
need all the information needed to test the conditions in the scripts, or
an interface to do so)
![Page 32: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/32.jpg)
Example: RPG Game
Game State
Collision +
Line of sight
Input
AI
Perception: • Navigation
mesh • Quests’
status • Interaction
events (hits, etc.)
Strategy
Decision Making: Scripts
Movement: A* + Animation
Basically for A*, although some scripts might check for things like “if there is
path between A and B then …”
![Page 33: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/33.jpg)
Outline • Game Engines • Perception and Action
![Page 34: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/34.jpg)
Perception and Action • The interface between the game engine and the AI is key
• As you already know (from the previous AI class): • Most AI algorithms are very brittle • Information needs to be represented in exactly the right way • A non appropriate representation might make the AI code very
complex
• AI algorithms are eager consumers of information: • An efficient way to get information from the game engine is
required
![Page 35: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/35.jpg)
Running Example • Imagine we are writing the AI of a unit in StarCraft:
• We want the unit to attack any opponent units that get in attack range:
attack_range
![Page 36: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/36.jpg)
Running Example (2) • Imagine we are writing the AI of a unit in StarCraft:
• We want the unit to attack any opponent units that get in attack range:
attack_range
Class Marine {public:
…bool update(GameState *gs);void render(GraphicsContext *g);
protected:…
};
![Page 37: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/37.jpg)
Two Approaches to Perception • Polling
• Message passing
![Page 38: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/38.jpg)
Polling • Simplest idea:
• No special perception layer • Whenever the AI wants some piece of information, it just asks the
Game State / Collision / Line of Sight modules about it
• Benefits: • Easy
• Problems: • Inefficient • The same information might be asked for multiple times • Most of the time the player does not collide with enemies, why
check it at every frame? • Hard to debug
![Page 39: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/39.jpg)
Running Example • Marine AI using “polling”:
attack_range
bool Marine::update(GameState *gs){ GameObject *o = gs->enemyInRadius(this, myPosition, attack_range); if (o!=0) attack(o);}
o
bool GameState::enemyInRadius (GameObject *o, Pos p, float radius){ for(GameObject *o2:gameObjects) { if (o2->isEnemy(o) && o2->distance(p)<=radius) return o; } return 0;}
![Page 40: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/40.jpg)
Polling Station • Rather than asking the game engine directly:
• Create a perception module with an API to access the game engine • AI asks this perception module (the polling station)
• Polling station can improve efficiency by caching queries
• Easier to debug (polling station can be used as the one stop place to set break-points or logging instructions)
• Having an API in between the AI and the Game Engine, allows game engine developers to work independently than the AI developers
![Page 41: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/41.jpg)
Message Passing • Event-based approach
• Wait for an event message to arrive rather than constantly checking for conditions to be true at each cycle (e.g. check if the player is in line of sight): • When something relevant happens (e.g. player is in line of sight), a
message is sent to all the AIs that care about this condition.
• Centralized “event manager”
![Page 42: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/42.jpg)
Event Manager
Checking Engine
Event queue
Registry of
Event Listeners
AI1
AI2
AIn
![Page 43: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/43.jpg)
Event Manager
Checking Engine
Event queue
Registry of
Event Listeners
AI1
AI2
AIn
AIs register for certain events, like collisions with certain objects, etc.
![Page 44: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/44.jpg)
Event Manager
Checking Engine
Event queue
Registry of
Event Listeners
AI1
AI2
AIn
A single checking engine checks for the events for which any AI is registered
![Page 45: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/45.jpg)
Event Manager
Checking Engine
Event queue
Registry of
Event Listeners
AI1
AI2
AIn
Certain events, do not need to be checked for, since the originating entity sends them directly (e.g. state changes
in another AI)
![Page 46: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/46.jpg)
Running Example • Marine AI using simple “events”:
attack_range
bool Marine::update(GameState *gs){ Pos oldPosition = myPosition; if (cycle==0) gs->registerForEvent(this, ENEMY_IN_RANGE); // ...
if (oldPosition != myPosition) gs->signalEvent(POSITION_CHANGE, this);}
bool Marine::event(Event *e){ if (e->type = ENEMY_IN_RANGE) attack(e->o);}
![Page 47: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/47.jpg)
Running Example • Marine AI using simple “events”:
attack_range
bool Marine::update(GameState *gs){ Pos oldPosition = myPosition; if (cycle==0) gs->registerForEvent(this, ENEMY_IN_RANGE); // ...
if (oldPosition != myPosition) gs->signalEvent(POSITION_CHANGE, this);}
bool Marine::event(Event *e){ if (e->type = ENEMY_IN_RANGE) attack(e->o);}
You will have to define some “Event” class, and come up with a list of events
that make sense in your particular game.
Notice that no CPU is wasted in checking whether any object that is not
moving is in range or not. In this example, only when an object moves,
the event manager performs the checks (triggered by the “signalEvent” call).
![Page 48: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/48.jpg)
Polling vs Message Passing • Polling is simpler, better for simple games (where
message passing is overkill)
• Message passing can be more efficient but it is more complex to deploy
• Best choice depends on the game type, but it is always worth spending effort into determining how the AI is going to get information from the game.
![Page 49: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/49.jpg)
Sensing
![Page 50: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/50.jpg)
Sensing • Polling Stations and Event Managers address the problem
getting information from the game engine
• But not all characters in the game should have access to all information: • If a character in a room wants to know if another one across the
map made a noise, it should not be able to get that information • Recent realistic games need a sensing model
• Sensing models are typically implemented over event managers, rather than polling stations.
![Page 51: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/51.jpg)
Easiest Approach: Fake it! • The AI has access to everything that happens in the
game, but it is programmed to act as if it didn’t know.
• Example: Warcraft II
![Page 52: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/52.jpg)
Simple Sensing Model • Characters can only see/hear what happens in the room
Event Manager 1
Event Manager 2
Event Manager 3
Event Manager 4
![Page 53: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/53.jpg)
Simple Sensing Model • Characters can only see/hear what happens in the room
Event Manager 1
Event Manager 2
Event Manager 3
Event Manager 4 When a character moves from a room
to another, it unregisters from an event manager, and registers in another one
![Page 54: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/54.jpg)
Realistic Sensing Models • Sight:
• Sight cones (60 degrees is standard) • Line of sight • Distance (although it is not realistic, it’s very typical in games) • Brightness/differentiation (used in games like Splinter Cell)
• Touch • Hearing
• Distance (reduce volume and use audible threshold) • Smell
• Not common, but some games use it (e.g. Alien vs Predator)
![Page 55: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/55.jpg)
Alien vs Predator
![Page 56: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/56.jpg)
Event Manager + Sensing (simple)
Checking Engine
Event queue
AI1
AI2
AIn
When characters register, they send their position and sensing capabilities to
the registry
Registry of
Event Listeners
Sensing Model
![Page 57: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/57.jpg)
Event Manager + Sensing (simple)
Checking Engine
Event queue
AI1
AI2
AIn
Registry of
Event Listeners
Sensing Model
Each “sense” has defined: - Attenuation factor (for distance) - Maximum range - Transmission speed - Restrictions (line-of-sight?)
![Page 58: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/58.jpg)
Event Manager + Sensing (complex)
Checking Engine
Event queue
AI1
AI2
AIn
Registry of
Event Listeners
Sensing Model
Sensing Transmission
Graph
![Page 59: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/59.jpg)
Event Manager + Sensing (complex)
Checking Engine
Event queue
AI1
AI2
AIn
Registry of
Event Listeners
Sensing Model
Sensing Transmission
Graph
Graph can be precomputed if map is static Divide game map in a finite set of regions. Define if different events (visual, sounds,
etc.) can transfer from region to region, and at which speed and attenuation.
Can model one-way glass, mirrors, sound travelling through pipes, etc.
![Page 60: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/60.jpg)
Show Off the AI Features!
![Page 61: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/61.jpg)
Summary • AI interfaces with a game engine. Basic AI components:
• Perception • Movement • Decision Making • Strategy
• Perception is the foundation over which your AI will be built. Pay attention to it!
![Page 62: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/62.jpg)
Example of Perception in Action • Example from the game engine used in project 5
![Page 63: CS 387: GAME AIsanti/teaching/2017/CS... · the other only ODE, this layer would define an API that the game engine can use, independently of the physics library underneath • There](https://reader033.vdocument.in/reader033/viewer/2022050303/5f6beb353eff4250fb59173b/html5/thumbnails/63.jpg)
Next Week • Movement • Steering Behaviors (for project 1)