Lord Generic Productions
Welcome back! This is the seventh
installment in "A Crash Course in Game Design and Production.
Like most of the previous lessons, this lesson is in multiple parts.
In PART ONE, we'll talk about the basic issues of Artificial
Intelligence (AI) as it applies to computer games. In Part TWO, we'll
discuss practical issues involved in getting your characters to do
what you want them to do, and go discuss the AI issues we will face
in our course project. In PART THREE we will write the sixth section
of the Design Spec for our Course Project, the AI specification. This
is part 1 of 3
Part 1 - Basics
of Game AI
Artificial Intelligence is whenever the computer makes decisions based on available data. It could be changing the direction of a moving ball when it hits a wall or having a monster attack as soon as he "sees" the player, or analyzing a defensive strategy to find an exploitable weakness. It doesn't matter. It's all AI.
The Difference between "Real" intelligence and "Artificial" intelligence is who is deciding what to do. When a person is faced with a decision, he looks at what he knows, then using that information analyzes his various options and chooses the one most in line with his agenda. He uses his "Real" intelligence to make the choice. When a computer program is faced with a decision, it checks the relevant system data, checks its options list, ranks each outcome as it pertains to its personality script and its goals and chooses the one that has the highest "outcome score." It's "Artificial Intelligence" because it only knows what you tell it, and can only choose from a limited list of preprogrammed options.
The basic flow of AI programming is:
Tell me what events I need to handle
There are basically four types of computer game AI: Physics, Player, Enemy, and Opponent AI. Most games will have all four types, with many variations or "flavors" of each type available (and probably active) at the same time.
Physics AI
This is how the universe responds to the objects, enemies, and the player(s). When you design a game, you build a virtual universe wherein your characters move around and interact. That universe needs certain physical laws that everything needs to obey. These things may include:
Movement - Where can the object\player go? What directions can he move in? What is the speed limit? Where is the object\player now? Where is he going? How fast, what direction, What natural forces are working toward\against thatmovement (gravity, friction, viscosity, etc.)?
Rotation - Should he be able to turn now? Is he turning? How much does he want to turn? How far should he be able to turn now? what is helping or hindering the rotation?
Size - What is the maximum size he can be? How big is he now? Is the size changing (to simulate moving toward or away from the player)? Does that size change affect anything else? (speed, acceleration, etc.)
Collisions - Is he currently in collision with anything? (walls, other players, enemies, objects, etc.) Does he stick to the walls or bounce off them?
Multi-Frame Events - Is he exploding, hyperspacing, or in transport for awhile? How many frames does this take, what frame is he on, is he invincible, is he invisible right now? How will this event affect nearby objects?
Object Creation - Do I need to create other objects? What kind? How many? Where can they go? How long should they live?
Lifespan - How long will the object be active? How long has he been active thus far, does he need to die now?
Animation - How many animations does he have, what animation is he currently using, does he need to change animations, what frame is he on, does the animation need to recycle?
Physics AI looks at these issues on an object by object basis and makes adjustments to each object's attributes when required. If the object hits a wall, say, the Physics AI (either a general Physics AI routine to handle everything or a Physics AI specifically for that object type) may temporarily deform the object (change the object image for this frame, say) and change it's direction so next frame it moves away from the wall. It may then send the right image to the sprite engine to draw it to the screen.
There is a lot happening behind the scenes at any given time, and most of it the player or object has no control over. Your "characters" are given some initial parameters, and then are sent on their way, you don't usually know where. Every once in awhile, the Physics AI checks their progress, "corrects" them if necessary, then let them go and do whatever they are supposed to do.
Example: In OidZone, Our Oids
need the following initial information to do their job (oiding around):
X
Horizontal position in the OidZone
Y
Vertical position in the OidZone
dx
Horizontal differential offset left or right
dy
Vertical differential offset up or down
size
Size - large, medium, or small
anim
Animation frame 1-30 to start on. Each Oid should start on a
different frame.
Active
Is this Oid still "alive?"
Type
Is this an Oid or a Swarm Mine?
dx and dy determine which of the
12 possible directions the oid will move in. They are respectively
the sine and cosine of the angle the oid is moving times the speed of
the oid in pixels per frame.
During each frame, the Physics
AI:
Adds dx to X and dy to Y to get
the new location of the Oid Checks to see if it has reached either
screen boundary
If so, it wraps X or Y or
both to the correct screen position
Chooses the next animation frame
in the Oid Animation
Checks to see if it hit anything
Was it the ship?
Blow it up!
Was it a shot?
Pop the shot
Can this Oid break?
Erase the original oid
Change the size
Create a new oid the same size
Make both oids move away
from ship 90 degrees apart
Erase the Oid and destroy it
Draw appropriate sprite into
Virtual Screen
Go on to next Oid
This same process is followed for
EVERY character.
In order for the Physics AI and the other AIs to do their jobs, we need to keep enough data for each object and the universe itself for each AI to make decisions.
Local Directors
These tell one object or group of
objects who they are and how they should act. They are like your boss.
When you come to work, they give you your job description and they
give you tasks to do.
For example, OidZone has 3 local directors, shipdata, oidata, and shots. They keep the x,y,dx,dy,size,anim... information for the ship, oids, and shots, respectively.
Global Directors
These tell EVERYBODY what to do.
They are like the CEO of your company. He tells your boss what to do
and consequently, what you are to do. Local directors make decisions
based on the situations at hand, and when they need guidance on
dealing with a character, they ask the Global Director.
OidZone has one Global Director, angletable. It contains the dx and dy information everybody needs to move in any direction in the OidZone. Whenever something needs to change direction, it looks in angletable for the appropriate differential offsets to move it in the right direction.
As the object or player does his
thing in the game universe, the Physics AI adjusts his Local (and
maybe his Global) Director(s) as needed to keep him obeying the
physical laws you set up.
Player AI
Player AI controls anything the
player's character needs to do that he doesn't have direct control
over. The player may tell his character to move forward, but the
Player AI figures out how to actually DO it. It may initiate the move
by setting the appropriate flags in the local director sequence and
choose the right animation and image to play get it going. Between
the beginning and ending of the movement, it may adjust the player's
parameters in response to whatever the Physics AI tries to do to the player.
For example: Say your character
needs to jump over a chasm. You tell him to back up and get a running
start. When he gets to the edge of the chasm you hit the jump key and
the Player AI animates the jump. As he is in the air, the Physics AI
slows and pulls him downward. At some point the Player AI realizes
that he isn't going to make it and causes him to flail his arms and
legs trying to grab hold of the ledge to keep from falling to a
grisly death.
At that point you hit the climb
button and the Player AI fights the Physics AI to scramble up to the
ledge. You hit it too late and Physics wins, causing him to lose his
grip and fall to his demise. The Player AI causes him to flail and
scream all the way down and make a sickening thud at the end.
The Player AI handles animation
sequences, player input, damage, healing, scores, movements,
character traits, boredom sequences, and anything else that the
player's character does or needs to have happen to him that the
player or other AIs have no control over.
Character Traits
Some games require that the
player's character have some distinguishing characteristics that draw
the player into the game. For example, Duke Nukem has a "dry,
cool wit" that makes him an action hero. "Damn...I'm
lookin' good!" "Heh-heh! What a mess!" Some heroes
need to say or do something amusing or grin maniacally whenever they
get their way. "Yeah, that's right! Who's the man?! Who's the
MAN?!" The Player AI decides what to say and when to say it.
Boredom Sequences
It's a good idea for the player's
character to do something while waiting for the player to do
something. Maybe he looks at his watch and taps his foot in
annoyance, maybe he makes funny faces at the player, maybe he cracks
jokes or taunts the player to get moving. The Player AI decides when
it's been too long and chooses the appropriate action from a
programmed list.
All these things you have defined
in the General Description, Art Spec, or Music and SFX Spec. When you
design the Player AI, you make a table of what events prompt which
decisions and if there are more than one option for an decision, what
other data will determine which choice needs to be made. We'll talk
about this in more detail in part 3.
Enemy AI
Enemy AI controls what the
"enemies" and other objects "do" during your
game. This can be as simple as moving in a constant direction and
speed and animating over and over, like the Oids in OidZone, or the
SS guys searching Castle Wolfenstein and relentlessly hunting you
down like the dog you are. You set up a list of "actions"
that the characters can do and what conditions cause them to do it.
This is the most fun AI to
program because:
Generally, it's pretty easy to do
The scripts generally aren't very complicated
It's neat to watch your "little guys" run around and try to do what you want them to
You get to laugh your butt off when what you told them to do is really stupid, and they show you on screen
Most Enemy AI is centered around
"Scripts." These are short instruction lists that are
interpreted in some way by the Enemy AI "Script Interpreter"
(SI) which sets the appropriate values in the character's local
director sequence,
which causes it to do it's thing.
For example: In an arcade game
the action in the script may be "fly in this direction for 10
frames", the script line may be
{-3,0,10}.
The SI would interpret the line
and set the object's dx=-3 and dy=0 so it'll move in the right
direction (in this case, left!), and set its frame counter to 10
frames. Every frame after that it'll tick down the frame counter and
let the object do it's thing until the frame counter hits 0. When it
does, the SI will get the next action and interpret it.
Some games may not need a Script
Interpreter, maybe a string of if-then-else-endif constructs will
suffice for the Enemy AI. Some games (like StoneKeep) require an
entire Scripting Language to be developed to handle the complex
action\reaction\interaction requirements. Whatever your game
requires, you need to create some way to give your little guys a set
of instructions to carry out and give them the info they need to make
any decisions.
Action and Attack Scripts
Action Scripts tell the object
what to do when it isn't attacking the player. It may be that your
guard needs to march back and forth along his patrol route and look
and listen for trouble, or the wave of attacking ships flies around
in formation and gathers its forces for the coming attack. Whatever.
You tell them what to do, how long to do it, where to go and when to
come back.
Attack Scripts tell the object
how to go get the player. Maybe the attacking bird needs to swoop
down and poop on the player, or the Evil Mage chooses a powerful
spell to cast on the party based on what he knows about them. (If
your character is wearing a ring of protection against a chicken
spell, and the mage recognizes it (because you stole it from him two
levels ago), he might choose the frog spell instead.) Whatever the
enemy needs to be able to do to your player, you need to script
somehow. How to do what and when. When to advance, when to fight,
when to use that killer secret move, when to retreat, when to run
away, when to go back to work. (Action Script)
A typical game might have
multiple interpreter routines for the different scripts, or one
function that you pass the script line for any object to and it
returns the appropriate values. Whatever the game requires.
In Part 2, I'll show you clips of the Enemy AI Script Interpreter for StarRanger, and we'll talk about action and attack scheme we'll use for our course project.
Opponent AI
An ENEMY
tries to kill or discourage the player, an OPPONENT
tries to achieve the same game goal as the player by doing the same
steps and making the same game decisions a real player would need to
make. Opponent AI is the "smartest" of all the game AIs. It
needs to know everything a real player needs to know to play the game.
It needs to know the rules and it needs dynamically make
goal-related decisions about every move it makes. It needs to have a
Strategy, an Agenda, and a Personality, and these are tougher to
program.
Strategy
Before a human player starts a
game, he has already determined:
His game Goal,as well as
secondary and tertiary goals.
And other game specific strategy
components. The Opponent AI needs to have all these things programmed
into it. All game options, how to analyze his position in the game in
relation to his goals, and how to choose the "right" option
in any situation. This takes a LOT of programming and playtesting
time to tweak the numbers to get them right.
There is a METHOD
to the MADNESS.
Agenda
Some players like to be an ENEMY
as well as an OPPONENT. It's fun to win, but it's more fun to kick
the other player's butt all over the battlefield. Some players will
make informal alliances to gang up on another player and divide the
spoils. Some will turn on those players at the first opportune time
and take them out as well.(Hitler was an agenda player) While Strategy
is concerned with playing and trying to win the game, Agenda
is all about making the other player sorry he wanted to play the game
in the first place. Players with Agendas don't lose gracefully, they
kick and scream and bite and do suicidal things in an attempt to try
and take another player out with them.
There is a MADNESS to the METHOD.
Agendas take precedence over
strategy at some time in the game. Whenever he has got a comfortable
lead and can afford to go after the other player or when the other
player has a comfortable lead and THAT JUST TICKS HIM OFF! Play
Monopoly with a group of
teenagers and you'll understand what I mean. At some point it seems
reasonable to wager everything and buy Boardwalk and put 3 hotels on
it JUST BECAUSE THE OTHER GUY WANTS IT.
When you program Agendas you list:
How much of a lead do I need
before I start stomping them into submission?
you get the idea.
Personality
Personality makes the Opponent AI
seem more like a real player. Maybe it talks to you, cheers you on or
taunts you mercilessly. When you program an Opponent AI, you ideally
would like it to interact with the player some way. You determine
what kinds of events would prompt a "personal response."
"Heh-Heh! What a Mess!" when he jumps around a corner and
tosses a pipebomb at you. "Et Tu, <your name>?" when
you stab him in the back. "Are you even trying?" when the
StarThieves take your fourth canister in a row. Whatever. Usually,
Personality and Agenda are intimately linked. "Oooh, did YOU
want that?" when he grabs the golden ring just before you could.
Opponent AI is by leaps and
bounds the hardest AI to construct. To get the Strategy part, you
teach it to play like you do. You make extensive notes as you play a
game as to what items cause what decisions, then "teach"
the Opponent AI to do those same kinds of things. Once it can play
the game, you have it play 100 or more games against real people and
tweak the numbers and decisions to make it play better than you do.
Then you have it play against itself and see if it freaks out. Once
you get the strategy working, you start on Agendas and then
Personality. Depending on the game, this could take a day or a solid
year or more to get right.
For our course project, we only
need Physics, Player, and Enemy AI. The next part will cover Enemy AI
and Script Interpretation in some detail using StarRanger as an
example of one way you can approach script interpretation. Then we'll
launch into the AI stuff we need to make our little guys move through
the maze and reach their goals. Stay Tuned!
End of Week 7- Artificial Intelligence and the AI Specification
If you have any questions for
group discussion or have any other questions, comments or
suggestions, email them to me to Pastor@BeRighteous.com
Mail monetary donations large or
small to
Lord Generic Productions
1218 Karen Ave Santa Ana, Ca 92704
A
Crash Course in Game Design and Production - Euphoria Edition
(C) Copyright 1996,2001 Lord
Generic Productions - All Rights Reserved