Photos Blog Random Things Links Guest Book Resume

AndyC.org : #Lecture

AI Roundtable

May 28, 2003
Times are in PST (Daylight savings)
Steve "Ferretman" Woodcock of www.gameai.com is hosting

[19:05] <zealouselixir> I'll kick things off with a question
[19:06] <zealouselixir> In terms of entity AI, what's the best way to implement a messaging system in your view?
[19:06] <RedBeard> Alright, if you have questions, message an op (other than Ferretman and X2) with your question and they'll either paste it or voice you
[19:06] <zealouselixir> for example, how do we communicate with our creatures to tell them to <group, attack player>, etc?
[19:06] <RedBeard> join #BackOfTheClass if you want to chat amongst yourselves
[19:09] <zealouselixir> (If anyone else has a question, feel free to /notice me and I'll get you on the air ASAP)
[19:09] <Ferretman> Okay, how do we talk to our creatures?
[19:09] <Ceasure> how would we pass perameters and such to an object and have it act on those, in an intelegent way?
[19:09] <Ferretman> Well a big part of that depends on the design of yoru game engine.
[19:10] <Ferretman> I really like C++ this way, since you can build in messaging pretty easily.
[19:10] <Ferretman> I like to send everything...player objects or AI creatures...messages to do their thing.
[19:10] <Ferretman> It makes multiplayer easier too, frankly.
[19:11] <Ceasure> thanx for the ideas
[19:11] <Ferretman> It's honestly not too hard...you'll have more trouble designing your infrastructure and leaving it alone.
[19:11] <Ferretman> You'll design it and start using it, then come up with new ways to extend it, etc.
[19:12] <Ferretman> I've seen some games never quite *finish* the AI engine's design....and they've suffered for it, frankly.
[19:12] <Ferretman> One last thing on that: Steve Rabin did a great chapter on a scripting engine in Gems that's worth looking at.
[19:13] <Ferretman> Howdy Zealous.
[19:13] <Ferretman> Or posit...sorry.
[19:13] <zealouselixir> we have a comment concerning network synchronicity, which will be made as soon as you've finished this bit on messages/scripting
[19:13] <posit> I've had trouble finding a way to manage messages across networked games. Do you usually just keep one messaging system on the server, or a copy for each client?
[19:13] <Ferretman> That is a tough one.
[19:13] <Ferretman> We had that problem doing a networked Playstation game a few years back.
[19:14] <Ferretman> I usually have worked with designs that have copies on each client, frankly.
[19:14] <Ferretman> Overall it's easier, though there's overhead that can be costly if you don't design it well.
[19:14] <Ferretman> It's sort of a UDP approach to things...messier, but easier to manage.
[19:15] <Ferretman> That answer things, or was there a followup?
[19:15] <Ferretman> I don't know how to say "I'm done"....sorry if I'm raw here, gang.
[19:15] <posit> Well, I use the copy-per-client approach at the moment, but have a lot of trouble keeping things in sync
[19:15] <Ferretman> Doesnt' surprise me at all.
[19:15] <posit> how much control of inter-object communication to you give to the server?
[19:16] <Ferretman> This is getting away from AI per se, but I'll take a swag at it.
[19:16] <Ferretman> Most of the games I've worked with only have a server to set things up and kick games off; they let each client handle their own messaging.
[19:16] <Ferretman> If a message isn't for a given client, it throws it away.
[19:17] <Ferretman> That makes comm traffic heavier, so we tried to come up with ways to let clients just "subscribe" to the messages they wanted.
[19:17] <Ferretman> It mostly sorta worked.
[19:17] <Ferretman> over
[19:17] <Ferretman> <heh>
[19:17] <posit> hmm, ok :) thanks
[19:17] <zealouselixir> all right, I believe RedBeard had a couple of questions
[19:18] <Ferretman> Cool. Go Red.
[19:18] <RedBeard> Most people associate AI with pathfinding. What else is there that a robust AI system needs to take care of?
[19:18] <RedBeard> and what should be integrated into an 'AI Engine' to make it be considered finished?
[19:18] <Ferretman> Lots of stuff. Pathfinding is mostly just the beginning.
[19:18] <Ferretman> A robust AI engine needs to have everything it needs to play the game well, of course. Easy answer. <grin>
[19:19] <Ferretman> I'd say at a minimu a good AI engine has to handle pathfinding and basic decision making, depending on whether the game is strategic or tactical.
[19:19] <Ferretman> I prefer engines that are extensble and let people "roll their own" AIs, but that's a lot of extra work that's more for "love" than any practical reason.
[19:20] <Ferretman> I don't think an AI engine is every really finished, just like a game....there are always things you want to do but can't because the game has to ship.
[19:20] <Ferretman> Did you have something in mind for an AI engine?
[19:21] <RedBeard> not really, was just referring to your statement above that games suffered from having an AI engine that wasn't "finished"
[19:21] <Ferretman> Gotcha.
[19:21] <Ferretman> You see that a lot, though. I mean, we're still seeing games that can't pathfind across a bridge, for pity's sake.
[19:22] <Ferretman> Clearly the game isn't finished and it suffers as a result.
[19:22] <Ferretman> Pathfinding is something a game should NEVER have a problem with these days.
[19:23] <Ferretman> CPUs are too fast and the problem is too well understood now.
[19:23] <Ferretman> </rant>
[19:23] <RedBeard> heheh, understood...
[19:23] <zealouselixir> just interjecting for a moment here, we've had a question from phantom: which Gems book was the article regarding the scripting engine in? That was GPG1, right?
[19:23] <Ferretman> Sure.
[19:24] <Ferretman> I believe so...let me check here real quick.
[19:24] <zealouselixir> We also have a question from Voxel
[19:24] <zealouselixir> Here goes: Q: What kind of games have you worked with and what AI methods/strategies (theoretical/implementation), in your own experience, have been most successfull (or otherwise)?
[19:24] <Ferretman> Yes, it was in GPG1. Excellent design.
[19:24] <Ferretman> Howdy Voxel.
[19:25] <Ferretman> I've worked on (more or less in order), military sims, arcade, Playstation, arcade, PC, PC, and military sims.
[19:26] <Ferretman> My most single successful things that I've taken from design to design are two things--a good debugger capability, and a flexible design (usually class-based) that lets me add rules and state machines easily.
[19:26] <Ferretman> Realtime debugging is an absolute must--youv'e got to be able to say, "What is it doing *right there?""
[19:27] <Ferretman> I'm more impressed with practical application than theory though.
[19:27] <Ferretman> I like to see something tried and work than sit through a Powerpoint presentation on why it's a Good Thing (tm).
[19:28] <Ferretman> Did that help? Or was there a more specific example I could give?
[19:28] <Ferretman> Heh
[19:28] <RedBeard> A question from me and kyle: Some game environments are designs in a very non-grid-based manner, with complex collision sets. What are the well-understood methods of allowing an AI to find paths through these environments, and do they involve a content creator imposing a navigation system or graph over the visible geometry?
[19:29] <Ferretman> Hmmm....
[19:30] <Ferretman> You can solve that a lot of ways one of which is, as you suggest, letting a content creator or level designer set up some kind of graph system.
[19:30] <Ferretman> Recently I've seen some 3D games where each agent dynamically generates its own waypoints to navigate through its environment.
[19:31] <Ferretman> There might be some "help" from a level designer to keep the pathfinder out of tight spots, but it generally works pretty well.. Looks more realistic too.
[19:31] <RedBeard> what kind of waypoint generation would they employ, and how much does the waypoint system "know" about the actual geometry (to let two agents pass each other in a hallway perhaps)?
[19:31] <RedBeard> ie, do they lay down a ton of waypoints in a grid and then cut off the ones that aren't useful?
[19:31] <Ferretman> 3D navigation is in many ways the same problem robotics faces, and those are good references on the subject.
[19:32] <Ferretman> Most of the waypoint generation is on the fly, of course, generally using some size mesh that makes sense to the agent....a stride, or perhaps a coupel of strides.
[19:32] <Ferretman> Basically the agent is thinking "if I go there, how many steps would it take and how exposed would I be?"
[19:33] <Ferretman> So he generates points in the environment to match the possibilities, feeds that to the pathfinder which adjusts it for anything the level designer might have markerd, and gets a path back.
[19:33] <Ferretman> The system usually gets the geometry of the environment from the collision detection engine.
[19:34] <Ferretman> More?
[19:34] <RedBeard> ok, sounds good :) here's one from CodeDemon: Coming from a position with little experience in AI, what path would you recommend a person take to effectively learn about AI as it pertains to games and simulations? Where would one learn about AI related design patterns and idioms useful for developing an AI engine?
[19:34] <Ferretman> Howdy CodeDemon.
[19:35] <Ferretman> Are you in high school, or college, or looking to get into the field?
[19:35] <Ferretman> You have Voice!
[19:36] <CodeDemon> thanks. Yes, I'm in university currently, and I'd definetly like to break into the field in the near future.
[19:36] <Ferretman> Okay.
[19:36] <CodeDemon> I have not yet taken any of the AI courses offered here, but many of them take a more theoretical and broad approach
[19:36] <Ferretman> The BEST single thing you can do, bar none (and don't laugh), is to take a typing course.
[19:36] <Ferretman> You'll be a better programmer BY FAR if you don't have to hunt and peck.
[19:37] <Ferretman> After that, get a foundation in the basics....database design and data structures.
[19:37] <Ferretman> You'd be amazed how many programmers think that the array is the reason classes were invented....to hold them in one spot.
[19:38] <Ferretman> After that, anything that gives you practical hands on experience is better t han theory classes, IMO.
[19:38] <Ferretman> Take courses in which you plan, design, and implement a project or two.
[19:38] <Ferretman> That's good practice and you can often do a game out of that.
[19:39] <Ferretman> Beyond that the Web is your single best resource for information.
[19:39] <Ferretman> Get the Quake SDK and practice. Look at other people's bots and steal stuff, then make it better.
[19:39] <Ferretman> If you think you've got something good, post it and let others pick it apart. Then make it better.
[19:40] <Ferretman> That kind of practical experience is pure gold to game developer companies.
[19:40] <Ferretman> How's that? More?
[19:40] <zealouselixir> if not, we have a question pending from posit
[19:40] <CodeDemon> Okay thanks, and are there any books you might recommend?
[19:41] <Ferretman> Any of the Gems series, of course (though I think #3 is the weakest of them).
[19:41] <Ferretman> Beyond that it's hit and miss. There are excellent books but you can find the same info on the web.
[19:41] <CodeDemon> Okay, thanks again!
[19:42] <Ferretman> Happy to help.
[19:42] <zealouselixir> all right, here's posit's question
[19:42] <zealouselixir> Have you found any game applications for neural nets?
[19:42] <zealouselixir> particularly with respect to real time use, rather than offline AI training
[19:42] <Ferretman> Not many due to the realtime nature of most games.
[19:43] <Ferretman> NNs need a lot of examples to get their recognition network set up, and that means training before you ship or after you ship.
[19:43] <Ferretman> There are some...Creatures uses NNs to some extent, for example. But that's a relatively slow game with lots of training of the critters.
[19:44] <Ferretman> Some developers have used NNs to train their AIs prior to shipping and then "frozen" them when the game ships, with some success.
[19:44] <Ferretman> The biggest problem with NNs is that I can't explain to my producer at a given moment *why* an AI is doing something, since
[19:44] <Ferretman> NNs are a kind of black box.
[19:45] <Ferretman> Producers hate that.
[19:45] <Ferretman> <grin>
[19:45] <zealouselixir> all righty. that answer is satisfactory for posit so we'll move along with the next question
[19:45] <Ferretman> Cool.
[19:45] <zealouselixir> from phantom: "I see you mentioned 'state machines', its probably pretty much accepted that these are the 'meat the potatoes' of AI with regards to tasks, now in in GPG2 there is a 'mirco-thread' way of handling the state machine system, and i was wondering if you had used that approach?"
[19:46] <Ferretman> I had indeed, out of that very book in fact (the design was better than my own).
[19:47] <zealouselixir> For those not familiar with the system, what's the basic premise?
[19:47] <Ferretman> Of state machines, or the threaded approach in the book?
[19:48] <zealouselixir> the threaded approach
[19:48] <Ferretman> Gotcha
[19:49] <Ferretman> If its' the article I'm thinking of, it recommends essentially breaking out the AI into its own "microthread".
[19:49] <phantom> aye, thats the one
[19:50] <Ferretman> This is something smaller than a "normal" thread might be thought of though, since the author suggests having just individual decisions broken out more than the whole AI itself.
[19:50] <Ferretman> I've seen both.
[19:50] <Ferretman> Every time there's an action for the AI to consider, it spawns off a thread to handle it. They die when the decison is made and returned to the AI agent.
[19:51] * Quits: Ferretman (Ferretman@co-colspgs-u4-c6a-187.clspco.adelphia.net) (Read error to Ferretman[co-colspgs-u4-c6a-187.clspco.adelphia.net]: Connection reset by peer)
[19:51] <RedBeard> ruh-roh
[19:51] <zealouselixir> Please hold for one moment
[19:51] <JasonR> haha
[19:51] * Joins: Ferretman (Ferretman@co-colspgs-u4-c6a-187.clspco.adelphia.net)
[19:52] <Ferretman> Sorry about that...probably my fault.
[19:52] <Ferretman> More questions?
[19:52] <phantom> so would you recomend this as a good direction to investigate for AI, possibly combining it with scripts used to process the 'thoughts'?
[19:53] <Ferretman> Yes, especially if you combine it with scripts.
[19:53] <Ferretman> A good scripting engine can make your AI very flexible.
[19:53] <Ferretman> And open to user mods, if you want that.
[19:53] <phantom> indeed, cheers, gives me something to work on :)
[19:53] <RedBeard> I've got one: should an AI be able to play the entire game effectively without any human players, or should it be designed to respond to player inputs mostly?
[19:54] <Ferretman> heh
[19:54] <Ferretman> Well, that's a tough one.
[19:54] <Ferretman> I think most AI programmers want their AI to do just that.
[19:54] <RedBeard> and building on that, how "realistic" or "human" should the AI be?
[19:54] <Ferretman> But if you DO build your AI that way, you get a game like MOO3....just hit return until you win. No fun.
[19:55] <Ferretman> Possibly the hardest thing for AI programmers to realize is that they are NOT building something to beat the player.
[19:55] <Ferretman> They are building something to play a Good Game.
[19:56] <Ferretman> Now, if an AI can be more 'human' than not that helps....it's more fun, and more believable.
[19:56] <Ferretman> It's good for it to make mistakes, ask for dumb things, etc.....makes things feel better.
[19:57] <Ferretman> Also if something *really* seems fishy to the human he might wonder "what is going on?" and give the AI more credit than it actually deserves...I've seen that a lot.
[19:57] <RedBeard> fishy?
[19:57] <Ferretman> A game in which there are diplomatic negotiations is a good example.
[19:58] <Ferretman> An AI that offers to, say, let the player build a starbase in a system that doesn't necessarily make sense can give the player pause.
[19:58] <Ferretman> He is likely to ask himself, "Why is it doing t hat when it's played such a smart game? Is it up to something?"
[19:58] <Ferretman> Of course that means your AI had better have been playing a good game to begin with.
[19:59] <RedBeard> ok, so kind of an unintentional bluff...
[19:59] <RedBeard> interesting :)
[19:59] <Ferretman> Exactly. The art of the bluff is sadly underutilized in games.
[19:59] <Ferretman> t's hard to recognize though.
[20:01] <Ferretman> So much of bluff involves eye contact and the like, and computers aren't good at that.
[20:01] <RedBeard> Here's a question from Tibre: I have a question about whether you can load FSM's dynamically, or whether the states have to be determined compile time
[20:01] <Ferretman> Okay, good question.
[20:02] <Ferretman> You could, I reckon; I've seen some games that do, through DLLs on Windows.
[20:02] <RedBeard> info: I have to go eat dinner (not my timing, sorry!), so direct your Q's at other ops for the time being
[20:02] <Ferretman> As for the second part of your question, let me understand better...the AI would build new states on the fly?
[20:02] <Ferretman> Interesting idea...can't say as I've thought of that.
[20:03] <Tibre> Actually, I just meant more of allowing somebody else to specify different states and actions (like through a script, i guess...) and allowing the enemies to load them
[20:03] <Ferretman> The hard part would be to recognize that a situation exists not already covered by an exsiting FSM. You'd probably want to score possible actons
[20:03] <Ferretman> and build new options if they exceeded some threshhold.
[20:04] <Ferretman> Definitely you can do that....some games do, in fact.
[20:04] <Ferretman> The SOAR engine (military mostly) does some stuff like that.
[20:04] <Ferretman> Interesting thought.
[20:04] <zealouselixir> okay, good deal
[20:04] <Tibre> thanks
[20:05] <zealouselixir> we have another question from Voxel
[20:05] <zealouselixir> Q: I am curious about AI in RTS genre games (red alert, age of empires, etc), can you provide any further insight as to how those games may work on different levels. Where might the decisions for AI player's actions be made (eg, to make a unit chop wood or a factory to output tanks)?
[20:05] <Ferretman> Cool
[20:05] <Ferretman> Okay, good question.
[20:05] <Ferretman> Way too many of them just cheat...the AI gets more stuff. That's not much fun for the player, though, unless he knows about it up front.
[20:06] <Ferretman> A lot of games will give the AI ability to build more complex paths on higher levels.
[20:06] <Ferretman> AOE, for example, does this....the higher level AIs can do "deeper" crunching of the terrain to find paths.
[20:06] <Ferretman> At higher levels they know about chokepoints, for example, whereas low lever ones don't.
[20:07] <Ferretman> Other games might have access to building templates at higher levels so they are smarter about how they create their cities.
[20:08] <Ferretman> Does that answer the question, or is there a followup?
[20:08] <zealouselixir> that about covers it
[20:08] <Ferretman> Heh.
[20:09] <Ferretman> There was a good article in Game Developer a couple of years back about the AOE pathfinding design and how they tuned it to the AI level.
[20:09] <Ferretman> Worth a read.
[20:09] <zealouselixir> okay, we have a question from Lightnin
[20:10] <Ferretman> Cool
[20:10] <zealouselixir> I've seen various ways to do AI scripting, from compiled code in a game to actual text scripts (usually interpretted by python or such). What are the benefits, and what would it take to write a custom scripting engine?
[20:10] <Ferretman> Big question.
[20:11] <Ferretman> Personally I'm in favor of interpreted approaches, as they're easier to open up to the user.
[20:11] <Ferretman> You generally aren't goign to suffer enough performance penalty to worry about it.
[20:11] <Ferretman> Beyond that, what you use is more a matter of choice.
[20:11] <Ferretman> Python is very popular as is Java and interpreted C.
[20:12] <Ferretman> You can roll your own but that generally only makes sense if you plan to reuse this engine across multiple games.
[20:12] <zealouselixir> (Others with questions, feel free to continue /msg-ing me)
[20:12] <Ferretman> In part a game AI person goes to scripting in order to make things easier on the level designers.
[20:13] <Ferretman> That means you've got to balance how easy it is to use the scripting engine vs. explaining and documenting it.
[20:13] <Ferretman> And you don't want to overlook building tools to support it....that can help a lot.
[20:14] <Ferretman> Did you have one in mind you're planning to use?
[20:14] <zealouselixir> We seem to have lost contact with Lighnin
[20:14] <Ferretman> Dang.
[20:14] <Ferretman> Well then, I hope that was helpful to somebody out there! <grin>
[20:15] <zealouselixir> So we'll move along to a general question RedBeard had
[20:15] <zealouselixir> "How do the AI architectures in different kinds of game environments (RTS, FPS, RPG, flightsim, etc) differ, and how are they similar?"
[20:15] <Ferretman> Big question.
[20:15] <Ferretman> Turn-based games generally have it easiest, because they have lots of available CPU between turns.
[20:16] <Ferretman> RTS games are the hardest, since they have a lot of units in realtime, usually with the player watching.
[20:16] <Ferretman> RPGs can cheat a bit since they only have to relly do "Ai" for the agents near the player and can do the rest more simply, perhaps algorithmically.
[20:16] <Ferretman> I've never done a flight sim so I can't really answer to that.
[20:17] <Ferretman> The various games are similar because every one has to have some kind of basic structure, usually decision making via state machine of some kind.
[20:17] <Ferretman> Very simple games (like Pong for example, or Chess) don't need much AI.
[20:19] <Ferretman> Done I think, unless I missed something?
[20:19] <zealouselixir> Sounds good to me
[20:19] <Ferretman> Cool!
[20:19] <zealouselixir> Voxel's up yet again with a question I had myself
[20:19] <Ferretman> Cool again.
[20:19] <zealouselixir> Have you used AI middleware and what is your opinion of it?
[20:19] <Ferretman> Oh boy.
[20:19] <Ferretman> I've not used it in any commercial product myself as of yet.
[20:20] <Ferretman> What I've seen so far isn't mature enough, in my opinion, to be of use to an experienced Ai developer
[20:20] <Ferretman> There are individual exceptions and bits of middileware that I think have great promise and I love the idea; I'm just not convinced it's there yet.
[20:21] <Ferretman> I am looking over several packages at the moment so my opinion may change.
[20:21] <zealouselixir> So you think there may be a future in AI middleware packages, like the Renderware platform?
[20:21] <Ferretman> I do think that we might need to come up wth some more standards in the AI field first though.
[20:22] <Ferretman> Yes I do.
[20:22] <zealouselixir> interesting future
[20:22] <Ferretman> I think that middleware is a good way to solve a lot of problems that keep getting reworked over and over again.
[20:23] <zealouselixir> factoring out commonalities that can be factored is indeed desirable
[20:23] <Ferretman> There are perhaps a half dozen packaeges out there now and they're nearly all different.
[20:23] <Ferretman> It's like using different 3D design packages...they're all cool, and they're all different.
[20:23] <zealouselixir> And yet much like physics SDKs were unheard of just a few years ago, they've now become both powerful and robust
[20:24] <Ferretman> Exactly!
[20:24] <Ferretman> But the physics middleware has a bit of an edge...they're math heavy, and people HATE math.
[20:24] <Ferretman> AI isn't as math heavy and so a hook is harder to define.
[20:24] <zealouselixir> :)
[20:24] <zealouselixir> okay, now we have a question posed by grok
[20:24] <Ferretman> Cool
[20:25] <zealouselixir> if you've finished with middleware
[20:25] <Ferretman> I'me done I think...?
[20:25] <zealouselixir> Here goes then. "Is there a clean way to shutdown a state machine from outside of the machine?"
[20:25] <Ferretman> If it locks up the thread you've got the same basic problem as with any other locked thread.
[20:25] <Ferretman> Unix makes it easier than Windows, that's for dang sure.
[20:26] <zealouselixir> We're gonna voice grok for his additional comment and questions
[20:26] <Ferretman> You could build in a handler into every state machines base class to handle shutdown messages, but that won't help if the t hread locks.
[20:26] <Ferretman> Go ahead.
[20:27] <grok> Ferretman: yeah the case i was thinking of was my code running as a serious so state and someone hits the ALT-F4 key
[20:27] <grok> *series
[20:27] <grok> *of
[20:27] <Ferretman> ?
[20:27] <Ferretman> Actually I'm afraid I don't know what that does...does that suspend the system?
[20:27] <grok> i can't think of a clean way to shutdown the state machine..
[20:27] <Ferretman> Ugh.
[20:27] <grok> Ferretman: quits the program
[20:28] <Ferretman> Gotcha.
[20:28] <Ferretman> Hmmmm......and the thread memory iis still out there in Windows.
[20:28] <Ferretman> Hard one. You could have some kind of watcher task that tracks processes that are part of the main program and kills them, I guess.
[20:29] <Ferretman> Might be tricky to register each thread with the watcher, though, and I wonder about overhead.
[20:29] <Ferretman> That's the best I can come up with off the top of my head though.
[20:29] <grok> Ferretman: yeah that the solution i came up with
[20:29] <Ferretman> If the thread is locked you're hurtin.
[20:29] <Ferretman> Heh.
[20:29] <grok> well thanks :)
[20:29] <Ferretman> Best I could do man...sorry!
[20:29] <zealouselixir> okay, we now have a question from Yann
[20:29] <grok> it's ok ;)
[20:30] <Ferretman> Go ahead.
[20:30] <zealouselixir> "Considering an Agent based AI system, with large worlds and possibly a large number of agents, we'd like to reduce computation overhead on agents currently out of the player's "interactivity zone". But it's hard to keep the game state consistent when simply disabling the AI for those. Is there a middle ground?"
[20:30] <Ferretman> Yep...it's called "Level of Detail AI", or LoDAI.
[20:31] <Ferretman> Essentially, you develop an algorithmic simplification of an agent's actions when it's outside the player's view.
[20:31] <Ferretman> It's actions are realistic and believalble, but don't take up the same amount of CPU as one in front of the player.
[20:31] <Ferretman> The game "Republic" uses this approach, and I know that Will Wright thought about using it for Sims Online at one point.
[20:32] <Ferretman> Just saving the agent's state isn't necessarily a good answer.
[20:32] <zealouselixir> sounds interesting. are there any resources out there concerning such a system?
[20:33] <Ferretman> The player could be dodgiing back and forth around a building, for example, and it would look like the world 'froze' while he wasn't looking...not good.
[20:33] <zealouselixir> (sorry, didn't mean to cut you short there)
[20:33] <Ferretman> Hmmm...there was a great lecture by Demis Hassabus on his LoDAI system he uses in Republic at GDC 2001.
[20:33] <Ferretman> It might be online; I'm not sure.
[20:33] <Ferretman> I'd check the GDC web site.
[20:34] <Ferretman> No worries..hard to tell when somebody is done here.
[20:35] <zealouselixir> Okay, we're going to voice Yann for a follow-up
[20:35] <Ferretman> cool
[20:35] <Yann> Ah, that's intersesting.
[20:36] <Yann> So basically, you have multiple scripts and/or state machines per agent, and switch forth and back between them ?
[20:36] <Ferretman> I love game AI...it's the most interesting part of the industry.
[20:36] <Ferretman> yes, that's a great way to do it.
[20:36] <Ferretman> Keep them modular, and small, so you don't have a huge debugging task.
[20:36] <Yann> How do you handle the transisitions ? Aren't there going to be logical glitches ?
[20:37] <Ferretman> Well, if you tie two things together that aren't logical you'll have problems...like walking and then suddenly crouching.
[20:37] <Ferretman> You'd want to go through a transition state first....stopping, maybe pondering or looking at a source of fire, then crouching.
[20:37] <Yann> Right. So you need a set of continuous connection points between the levels of detail ?
[20:38] <Ferretman> Or continuous enough so it doesn't look dumb.
[20:38] <Ferretman> Again, if the player isn't watching you don't have to go through as much hassle.
[20:38] <Ferretman> You just don't want an agent to look dumb while the player is looking.
[20:38] <Yann> That's the point, yes. Hmm. Interesting concept. I'll surely do some more research on that one.
[20:38] <Ferretman> You can be dumb, just don't get caught.
[20:39] <Ferretman> Cool.
[20:39] <Yann> :)
[20:39] <zealouselixir> :) Okay, good one
[20:39] <Yann> Thanks
[20:39] <Ferretman> You're more than welcome.
[20:39] <zealouselixir> Now Lighnin again with the following question
[20:39] <zealouselixir> Is there much usage of things like fuzzy logic and adaptive learning in games, or is a lot of it some form of 'if <this>, do <this> with a bit of random thrown in'?
[20:40] <Ferretman> Most of it right now is what you suggest, "if this then do that".
[20:40] <Ferretman> Learning has been a big topic at the last couple of GDCs though, especially in light of Black & White and The Sims.
[20:41] <Ferretman> It's probably one of the areas that the middleware folks should investigate, giving developers tools to help their agents learn.
[20:41] <Ferretman> And the online RPG folks would LOVE to have characters that actually responded to players in some meaningful fashion.
[20:42] <Ferretman> I think we'll see more games using the "slap/praise" approach in B&W in the next couple of years.
[20:43] <Ferretman> That's basically a kind of reinforcement learning (also used in Creatures) that's pretty easy to understand and develop.
[20:43] <Ferretman> Good?
[20:43] <zealouselixir> Yes
[20:43] <zealouselixir> We have a comment
[20:43] <Ferretman> Yeppers.
[20:44] <zealouselixir> Lightnin: I've pondered such AI learning for games for a number of years now but have not really seen anyone else try to implement such learning based on how a player plays a game
[20:44] <Ferretman> There's not been much.
[20:44] <zealouselixir> as you say, it'll probably crop up more in the future
[20:44] <Ferretman> First, it's harder than just building scripts.
[20:44] <Ferretman> Second, how do your playtesters test it if every game is different?
[20:45] <Ferretman> Third, how do you explain to your producer (who usually wants to be the next Spielberg) that his game is different than *the* game?
[20:45] <Ferretman> It can be maddening.
[20:46] <zealouselixir> all right, some things to think about
[20:46] <Ferretman> cool
[20:46] <zealouselixir> Our next question comes from SirBruce
[20:46] <zealouselixir> How early in a game's development should an AI programmer be hired and tasked? In many games they are almost an afterthought, and I'm sure that hurts them, but by the same token I would think early in the design stages you don't need them, particularly if you're not doing anything unusual or non-standard (just another RTS for example)
[20:47] <Ferretman> At the very beginning.
[20:47] <Ferretman> If you want a good AI, that is.
[20:47] <Ferretman> The design of a good AI for a game goes hand in hand with so many game systems that they need to be there from the very beginning.
[20:48] <Ferretman> Fortunately (from the roundtables) it seems like most companies are now giving AI developers equal treatment with the graphics guys.
[20:48] <Ferretman> Of course, I'm biased. <grin>
[20:48] <zealouselixir> (Get your last-minute questions in now - /msg me)
[20:49] <zealouselixir> That was insightful. Of course, we'd expect nothing less
[20:49] <Ferretman> Heh....
[20:49] <Ferretman> I hope to live up to the standards of the forum! Good crowd here.
[20:50] <zealouselixir> Splendid so far :)
[20:50] <Ferretman> Thank you, honestly. I'm new to this.
[20:50] <zealouselixir> Now we have a forward-looking question from revolver
[20:50] <Ferretman> Okay.
[20:50] <zealouselixir> "What's in the future for game AI? If you have any knowledge of it, does Half-Life 2 make significant advances?"
[20:50] <Ferretman> I have a .357 revolver myself. <grin>
[20:51] <Ferretman> I don't know about HL2...sorry.
[20:51] <Ferretman> As far as the future of game AI goes, I think we'll see more experiementation with learning and more use of middleware.
[20:51] <Ferretman> We will GRADUALLY (and I mean gradually) see some interoperability standards evolve.
[20:52] <Ferretman> This in turn will make it easier for developers to move some AI engines from one game to another, and we may see an AI engine
[20:52] <Ferretman> advertised in a way similar to a 3D engine ("Now using the ThinkSmart! (tm) Game Engine!").
[20:53] <Ferretman> That's what I've been getting from the roundtables at the GDC, anyway.
[20:54] <zealouselixir> All right
[20:54] <Ferretman> I have a question for the group!
[20:54] <zealouselixir> okay, we'll unmute for a few moments, and then finish up with our last questions
[20:54] <Ferretman> Cool
[20:56] <zealouselixir> So go ahead
[20:56] <Ferretman> Who, me?
[20:56] <zealouselixir> yeah
[20:56] <Ferretman> Okay.
[20:57] <Ferretman> Do folks out there think that game AIs have generally been getting better over the last few years?
[20:57] * zealouselixir sets mode: -m
[20:57] <Ferretman> Or are they generally not advancing at all?
[20:57] <Lightnin> ya, after my gateway is fixed :P wish the power hadnt gone out and caused my gateway to have boot issues. i would have enjoyed this more.
[20:57] <Ferretman> heh
[20:57] <Lightnin> Ferretman, thanks for the Q&A though
[20:57] <Queeble> I tihnk AI has advanced
[20:57] <Ferretman> You're more t han welcome.
[20:57] <Ferretman> Cool, Queeble. Any specific examples?
[20:58] <Doolwind> I believe good AI is far rarer than bad AI still unfortunately :(
[20:58] <Lightnin> i'm hoping to get a chance at some point to try making some way to easily create some form of fuzzy logic for AI and make it easier than currently possible
[20:58] <phantom> I think so, certainly from Doom days of 'run at the other player'.. teh AI in Decent3 impressed me at the time (the way the small bots would shoot you and run off to get a bigger guy) but there are still issues with things being 'dumb' with reference to LOS and hearing you move...
[20:58] <Ferretman> I agree with you Doolwind.
[20:58] <Lightnin> i still LOVE Descent3
[20:58] <Ferretman> Good point, phantom. Your'e right about that.
[20:58] <Ferretman> Good AI is much too rare, unfortunately.
[20:58] <Lightnin> i dont play namy games but it was one of the best with some great AI
[20:59] <Ferretman> I like GalCiv's AI.
[20:59] <SirBruce> Behavioural AI is getting better, but I'm not sure how much of that actually makes for a *better game*... more immersive, maybe, but not necessarily more fun. Strategic AI I don't think has gotten better.
[20:59] <Queeble> actually, I can't think of any actual examples, but I dunno...
[20:59] <Yann> I think the progress of AI has been much slower, than eg. graphics, but this might have to do with the inherent complexity of create a realistic "thinking" algorithm.
[21:00] <Ferretman> I think Bruce is right there....tactical and shooter AI is probably easier than strategic thinking.
[21:00] <Yann> Still, a very interesting and promising field of research.
[21:00] <Ferretman> It's hard to show that an agent did something "smarter", vs. an explosion effect being "cooler".
[21:00] <revolver> I think AI has been creeping along. It's advanced at a much slower rate than graphics, but then, graphics is usually what sells. Developers usually target graphics (and corresponding art content) for the largest development time, and other areas such as networking and AI only receive incremental advances.
[21:00] <SirBruce> About AIs learning from player behaviour - Galactic Civilizations has that now, but it's not automatic... they analyze top-scoring games that players submit online and the adjust AI strategies like units, tech tree selection, production queues, etc. to match the top player behavior
[21:00] <Ferretman> AGreed, revolver.
[21:00] <Ferretman> I wonder how well that's working?
[21:00] <Doolwind> Problem is, good graphics are easy to see, but "good" AI is a lot harder to even just describe, let alone create
[21:01] <Ferretman> Brad didn't make it to the GDC or I would have picked his brain about that!
[21:01] <SirBruce> Well I think my point too is that "good" AI doesn't always translate into better gameplay
[21:01] <Ferretman> It's hard to show good AI to a producer, and not at all obvious that it will help sell a game.
[21:01] <Yann> True, unfortunately games tend to sell through eye candy, rather than through a good AI. But that will probably change in the future.
[21:01] <Ferretman> Absolutely right!
[21:02] <phantom> also, i guess AI has suffered from a lack of CPU time, so you are limited by what you can do.. with the advancement of gfx cards the AI should get more CPU and we should see better/more complex AI appearing
[21:02] <Ferretman> I think that's where middleware will come in.
[21:02] <Ferretman> CPU has been bad in the past but it's not that bad now.
[21:02] <SirBruce> If we think totally emulating a human is, say, 1 million little discrete pieces, and old AI only did, like, 10 of those things, and new AI does 100, sure the new AI is "better" but since they aren't anywhere close to human yet they all still look dumb to us :)
[21:02] <Ferretman> Most developers at the last couple of GDCs said they had alll the CPU they needed really.
[21:02] <Ferretman> Good point there, Bruce.
[21:02] <revolver> And as a result of the lack of R&D time, the AI that does end up employed is often implemented in the game system without significant though on optimization on both algorithmic and lower levels.
[21:03] <Lightnin> i still like how so many games, an AI character will shoot or attack you thru another AI character and not hurt the one that is being hit
[21:03] <Lightnin> have to roll my eyes every time i see it
[21:03] <Doolwind> Ferret: are AI programmers getting more respect at places like GDC nowadays?
[21:03] <Ferretman> Game developers are really suffering from the lack of ability to do research...the schedule is a bitch.
[21:03] <Ferretman> Yes Doolwind, definitely.
[21:03] <Doolwind> :)
[21:03] <Ferretman> Our sessions are packed.
[21:03] <Lightnin> AI is not an easy thing to research
[21:03] <Yann> Lightnin: that's more a problem with collision detection...
[21:03] <Lightnin> too many variables, too many ways
[21:03] <Ferretman> No, and it's not always obvious what the result is.
[21:03] <SirBruce> GDC is a great place for any developer... AI or not... I recommend everyone attend
[21:04] <Ferretman> Me too very much.
[21:04] <phantom> and i guess its hard to justify to the guys paying the bill for game to be made why you should spend an extra X amount of time when the AI already works enuff for the game..
[21:04] <Ferretman> I think game developers have a lot to learn from the academics yet revolver.
[21:04] <Doolwind> Is everyone doing most AI in C/C++??
[21:04] <Lightnin> Yann, not always. in single player they dont hurt each other but do in multi. more like the code failing to say it was attacked by someone (coded to see if it was attacked by you)
[21:04] <revolver> I think that games are going to approach something of a plateau soon. Like Carmack says, and I agree, graphics middleware will become even more pervasive. What's left after graphics have been solved via middleware? Gameplay, of which quality AI will be ever more important.
[21:04] <zealouselixir> all right, we'll go back mute now and finish up. one more minute
[21:04] <Ferretman> Yes, most AI is in C/C++.
[21:04] <Ferretman> Most games are, for that matter.
[21:05] <Doolwind> yeah i know that, just my exposure to AI with lisp was far nicer code :)
[21:05] <skwelgirl> hello
[21:05] <Ferretman> We've already passed multiple polys per pixel...gotta do something else to make your game stand out.
[21:05] <Ferretman> Heh.
[21:05] <Ferretman> Howdy.
[21:05] <zealouselixir> okay. We just had a couple of similar questions regarding resources
[21:05] <Ferretman> Okay.
[21:05] <Ferretman> I can't stay too much longer but we can field those.
[21:05] <zealouselixir> hope I didn't snub everybody there. we'll have plenty of chances to talk afterwards :)
[21:05] <Ferretman> absolutely.
[21:05] <zealouselixir> Okay, concerning resources. First from Yann: "What good online AI resources can you recommend, and what books are must-haves ?" and an overlapping question from phantom: "any websites that can be recommended for this topic?"
[21:06] <Ferretman> They'll love this answer here...gamedev is a great site.
[21:06] <Ferretman> Books: Get the Gems books.
[21:06] <zealouselixir> as is GameAI.com :)
[21:06] <Ferretman> Thank you.
[21:06] <Ferretman> ai-wisdom is also very useful.
[21:07] <Ferretman> I do virtually all of my research on the web. I actually have very few AI books in my library.
[21:07] <Ferretman> The web is just so *useful*.
[21:09] * Quits: Ferretman (Ferretman@co-colspgs-u4-c6a-187.clspco.adelphia.net) (Ping timeout for Ferretman[co-colspgs-u4-c6a-187.clspco.adelphia.net])
[21:09] <zealouselixir> Dah.
[21:10] <RedBeard> :-\
[21:10] * zealouselixir sets mode: -m
[21:10] <SirBruce> test
[21:10] <Voxel> :-/
[21:10] <RedBeard> guess it's talky time
[21:11] <SirBruce> I think he lost his net connection
[21:11] <Lightnin> RedBeard: you sound like a baby when you say that
[21:11] <RedBeard> :P
[21:12] <RedBeard> hmm
[21:12] <phantom> 5:10am... time to find something unhealthy to eat before bed i think ;)
[21:12] <RedBeard> i guess everyone's speechless at the shock of losing our answer guy :)
[21:12] <Voxel> Lightnin, babies are cool
[21:13] <zealouselixir> well, I was going to say, "All right, well I guess we'll wrap it with your final words," but I guess those came sooner than expected
[21:13] <SirBruce> Ferretman is troubleshooting the problem now
[21:13] <SirBruce> <--- on the phone with him
[21:13] <RedBeard> lol, sounds bad
[21:13] <Voxel> aww
[21:13] <zealouselixir> So instead I'll say, hope everyone enjoyed the chat and was mentally stimulated. It's been a pleasure being a fill-in facilitator.
[21:13] <SirBruce> I think his cable modem die
[21:13] <SirBruce> d
[21:13] <Voxel> you can type for him :) via phone
[21:14] <SirBruce> yeah right
[21:14] <SirBruce> He's trying to get back
[21:14] <Voxel> or he can dial into your modem... virtual network
[21:15] * Voxel runs dry on ideas after the 'fax'
[21:15] <Lightnin> SirBruce, first my power is lost long enough to have to shutdown and my gateway refused to boot back up
[21:15] <Lightnin> now his cable modem
[21:15] <Lightnin> who's next i wonder
[21:15] <SirBruce> Does anyone else have any more questions for Steve or should he go his modem isn't working
[21:16] <April> Tell him thanks alot for the chat
[21:16] <Voxel> Thanks fo the lecture! Been great!
[21:16] <RedBeard> yes, many thanks from all of us
[21:16] <Lightnin> SirBruce, no Q's from me. just glad he was here
[21:16] <Yann> Very nice lecture, agreed.
[21:16] <RedBeard> it was great having him, hope he'll come back sometime :)
[21:17] <SirBruce> He says he'll come back if you'll have him
[21:19] <masterg> nice lecture, again.


Text file last modified on April 28, 2007, 10:28:20 PM, MST.

All content Copyright 2017 Andy Campbell.
Permission to reproduce content, in any format,
by explicit written permission of author only.
"An expert is a person who has made all the mistakes that can be made in a very narrow field."
- Niels Bohr (1885 - 1962)