AI In XS
would any one know what type of AI XS uses? I''m just curious.... In my optinion its the best AI I''ve ever see in an FPS..The damn things are actualy smart.... and they seem to learn your patters after you''ve been playing for a while... I''d guess neural nets but I''m not shure =)
The Great Milenko"Don't stick a pretzel up your ass, it might get stuck in there.""Computer Programming is findding the right wrench to hammer in the correct screw."
I''m intrigued. But what is XS?
Premature optimizations can only slow down your project even more.
神はサイコロを振らない!
XS is an older game (runs in dos)... basicaly the story line is your friend gets kill in a fight to the death compatition... well he''s asked you to take his place... the actual game play goes like this you start off by picking 2 weapons (from a faily large list) and a gernade weapon... then your thrown into an arena with 3 other players (comp controled)... theres a total of about 60 diffrent bots... each with vairing difficults and personalitys.... the first few are easy as hell but they start getting a lot tougher... around the 4 or so mach they bots get real tough for me... then I think its the 6 or 7 match I get stuck =) the winner is the last man standing... they don''t have alot of the problems of quake bots... eg. they don''t jump around all the time, they change there tactices each time they come at you (it take awhile to kill each other so they can try several times in a game), its some realy great AI.... =)
The Great Milenko"Don't stick a pretzel up your ass, it might get stuck in there.""Computer Programming is findding the right wrench to hammer in the correct screw."
The guy that wrote the AI in XS was called Dave Wilson.
He worked at SCi when I was there. I was doing the Sega Saturn
version until it went the way of all Saturn projects. I did do the elevator code and mine in the PC code though. The AI code was node based and written from scratch. As far as I know there was a certain degree of learning. If you leave them long enough they might all become friends and start playing cards.
He worked at SCi when I was there. I was doing the Sega Saturn
version until it went the way of all Saturn projects. I did do the elevator code and mine in the PC code though. The AI code was node based and written from scratch. As far as I know there was a certain degree of learning. If you leave them long enough they might all become friends and start playing cards.
If I remember right, Dave actually implemented dozens of attributes for the characters. Dave was a bit of a boffin type. Unfortunately we seem to have lost touch with him, otherwise I am sure he would give you a very indepth description/explanation.
Having been pointed here by JohnnyBoy, here it is from the horse''s mouth. (Thanks for the comments, GM)
Actually, there wasn''t any *learning*. Probably the main reason I didn''t use neural nets was that I wasn''t an AI programmer. Initially, I was supposed to do a couple of month''s research while an AI expert was found. When it was clear an expert couldn''t be found (for the money offered?), I ended up having to do the lot myself. Given that the release date kept slipping, I had time to keep adding more refinements onto the initial primitive code, but never enough time to tear it all up and write it from scratch again, so it sort of evolved. The characters were designed to behave as close as possible to human characters, since the original idea was for a network game, with AI filling in for missing players.
As far as I can recall, through the course of a single level, the AI character''s behaviour might alter depending on their level of damage. Every level essentially started from scratch, though beyond the character mix changing with levels, though I think a ''hardness factor'' may have increased though the game.
Rather than neural nets, the logic was just a hierarchy of actions, generally ''planned'' as infrequently as possible (to minimise per-frame processing), and abandoned and recomputed as conditions required. The higher-level decisions were governed by lots of probability factors which varied between characters.
There were something like 40 low-level operations, like move to point X, change to run/walk/stop/jump, turn and then fire at point Y, strafe (ie sidestep to point X while firing in direction Y), move to point X while turning body to fire at point/character Y.
Some of those operations (like the last one) had parameters governing things like the coarseness of the movements (a poor character might aim less accurately) or the amount of firing.
The simple actions could be choreographed into sequences - dodge from behind cover, fire, dodge back to cover - to make things look more realistic, and so on up to the higher levels.
I have to admit that when I saws the game running, even I sometimes thought that the characters were doing some smart thing or other, before realising I hadn''t told them how to. I guess the code was sufficiently complex that some kinds of intelligent behaviour appeared to emerge.
There wasn''t any cheating as such - I *think* the chances of a character finding you (or each other) may have increased through the course of a level, but only in the sense that the longest-term planned ''searching'' routes were biased towards nodes near where you were at the time the route was planned, so they didn''t home in as such, they were just more likely to bump into you, but would be as surprised as you were.
Since the lowest level movement code was the same as a human would use, the AI was very useful for debugging. I''d just set the game off with random seeds, wait for a crash, examine the logfile to see which frame the crash happened on, then let the game run with the same seeds to the penultimate frame, and step the code to the crash point.
I guess I should try and dig up the source code and have a look for old times'' sake, though it was >10000 lines of C, and somewhat more hacked than designed, so it might take a while to get my head round it.
Dave Wilson
PS - Anyone out there looking for a dirty old C programmer?
Actually, there wasn''t any *learning*. Probably the main reason I didn''t use neural nets was that I wasn''t an AI programmer. Initially, I was supposed to do a couple of month''s research while an AI expert was found. When it was clear an expert couldn''t be found (for the money offered?), I ended up having to do the lot myself. Given that the release date kept slipping, I had time to keep adding more refinements onto the initial primitive code, but never enough time to tear it all up and write it from scratch again, so it sort of evolved. The characters were designed to behave as close as possible to human characters, since the original idea was for a network game, with AI filling in for missing players.
As far as I can recall, through the course of a single level, the AI character''s behaviour might alter depending on their level of damage. Every level essentially started from scratch, though beyond the character mix changing with levels, though I think a ''hardness factor'' may have increased though the game.
Rather than neural nets, the logic was just a hierarchy of actions, generally ''planned'' as infrequently as possible (to minimise per-frame processing), and abandoned and recomputed as conditions required. The higher-level decisions were governed by lots of probability factors which varied between characters.
There were something like 40 low-level operations, like move to point X, change to run/walk/stop/jump, turn and then fire at point Y, strafe (ie sidestep to point X while firing in direction Y), move to point X while turning body to fire at point/character Y.
Some of those operations (like the last one) had parameters governing things like the coarseness of the movements (a poor character might aim less accurately) or the amount of firing.
The simple actions could be choreographed into sequences - dodge from behind cover, fire, dodge back to cover - to make things look more realistic, and so on up to the higher levels.
I have to admit that when I saws the game running, even I sometimes thought that the characters were doing some smart thing or other, before realising I hadn''t told them how to. I guess the code was sufficiently complex that some kinds of intelligent behaviour appeared to emerge.
There wasn''t any cheating as such - I *think* the chances of a character finding you (or each other) may have increased through the course of a level, but only in the sense that the longest-term planned ''searching'' routes were biased towards nodes near where you were at the time the route was planned, so they didn''t home in as such, they were just more likely to bump into you, but would be as surprised as you were.
Since the lowest level movement code was the same as a human would use, the AI was very useful for debugging. I''d just set the game off with random seeds, wait for a crash, examine the logfile to see which frame the crash happened on, then let the game run with the same seeds to the penultimate frame, and step the code to the crash point.
I guess I should try and dig up the source code and have a look for old times'' sake, though it was >10000 lines of C, and somewhat more hacked than designed, so it might take a while to get my head round it.
Dave Wilson
PS - Anyone out there looking for a dirty old C programmer?
Thanks for the input Dave!
Given the benefit of hindsight, more experience and better AI tools, how would you tackle the problem now?
Timkin
Given the benefit of hindsight, more experience and better AI tools, how would you tackle the problem now?
Timkin
Tackling the problem again, I guess I could do somewhat more useful design, since I now know roughly what kind of landscape I''m operating in, and what some of the low-level control problems look like. I''ve had some ideas about how to extend things to more team-based or massively multiplayer contexts - maybe tending more towards simulation than small-player count scenarios.
I really don''t know much about modern AI tools (or even ancient ones), but I guess knowing I can at least do something reasonable from experience if research failed, I could afford to risk a little time to check out more advanced methods to enable more intelligent behaviour, given an underlying simple (and hopefully robust) skeleton engine to do much of the frame-to-frame work.
After the release, I had the time to play around and see how much less computation I could get away with. It seemed that I could have done the same with less power, but since the AI only took a small fraction of the time even in the days of 486s, that would probably only be relevant these days with large numbers of AI characters.
I really don''t know much about modern AI tools (or even ancient ones), but I guess knowing I can at least do something reasonable from experience if research failed, I could afford to risk a little time to check out more advanced methods to enable more intelligent behaviour, given an underlying simple (and hopefully robust) skeleton engine to do much of the frame-to-frame work.
After the release, I had the time to play around and see how much less computation I could get away with. It seemed that I could have done the same with less power, but since the AI only took a small fraction of the time even in the days of 486s, that would probably only be relevant these days with large numbers of AI characters.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement