Odd Glitch in Company of Heroes
Labels: AI, cheating, Chris Jurney, Company of Heroes, logical error, Opposing Fronts
| Feedback and ratings: |
|
|
|
|
IA Information
Communication
Dave Mark's book,
Previous Posts
Archives
|
Post-Play'em - Observations on Game AI Thursday, February 11, 2010 Odd Glitch in Company of Heroes
Just to be clear, I really like Company of Heroes. I have always been an RTS fan since the original Warcraft and progressing through Starcraft, Age of Empires/Kings and especially Empire Earth. That being said, CoH is very well done.
I only recently got around to grabbing the full version of the original CoH and the expansion, Opposing Fronts. (Thank you Valve weekend sales!) My prior posts here were only about the downloadable demo. Obviously, there are some significant differences in the full release version. I like them all. Rather than continuing through the script-fest that campaign maps usually are, I have been playing a lot of skirmishes against the computer. I find a lot of the tactics by the computer to be pretty familiar for RTS games. For example, as I mentioned in a prior post, it is obvious that there is a lot of influence mapping going on. If I find myself a little behind on producing units, I will often be drawn into a series of dashing from defense point to defense point as the computer picks on whatever is currently the weak spot. My only question in this situation is how much is the AI cheating with knowledge about my force disposition. I know that it is not that easy to discern what the computer has placed and entrenched... it seems like he knows where my weak spots are even if they are deep within my territory. Anyway, as I was playing a skirmish map, I ran across something very odd. Normally, I had been playing against the "normal" level of difficulty. I had been winning fairly regularly against that level, however, and decided to ratchet it up one level. I was playing the Lyon map against the computer on "hard." Because this was a control point map, I was quite used to meeting the "normal" AI at the river as we battled for those 3 points. I figured that the "hard" AI would be just as quick to get to the river. However, I captured the first point... then the second... without seeing the AI at all. I began to suspect that either something was dreadfully wrong or that "hard" used a different tactic than "normal" - such as "build up and crush him" rather than "dash for the control points". Not too long after that, it became obvious that something was indeed seriously amiss. Thanks to the wonders of replay files, I was able to go back and witness what the computer did... or did not do. A video is included below. I sent the video privately to my friend and colleague, Chris Jurney, who did much of the excellent AI work on CoH. He thought it was amusing as well. His speculation was that the Lua script exploded somehow. It obviously didn't cease working entirely because we see some orders trickling through at times. He invited me to send him the replay file so that he could forward it on to the Relic programmer who is responsible for it now. It doesn't seem to be a problem with the map itself as I did go on to play a new match on that map on "hard" and it proceeded to hand me my buttocks as I expected. On the other hand, it may be a problem with a combination of that map, that difficulty level, and a randomly selected tactical approach that knocked a variable out of bounds or something. Regardless of the cause, this is a great example of how important testing is... and yet things still slip through. Anyway, I will try to do more video captures of some games later - especially the view that shows how the computer is moving throughout the map during the game. That has been very interesting to analyze because it shows how the influence mapping and even the pathfinding is working as part of the decision making. Labels: AI, cheating, Chris Jurney, Company of Heroes, logical error, Opposing Fronts
Wednesday, February 25, 2009 Left 4 Dead: Companion State Changes
Another interesting observation in Left 4 Dead. In this case, it is about the state machine that the companion AIs are using. First, the observations:
The first clip in the video below shows me getting ready to leave the safe house at the beginning of the level. My companions did their usual "grab some stuff" behaviors and then lapsed into "random wander" idle behaviors (I couldn't hit the screen shot key fast enough to show Louis standing with his nose in the corner like a punished boy.) When I went down the stairs to the door, I was mildly perturbed that they didn't follow. I then opened the door and shot the zombie standing outside. They still had not moved to join me. A zombie rushed me, I leveled him, and my sidekicks were still admiring the walls upstairs. Only when I stepped across the threshold did they move to join me (with Francis doing a completely unnecessary walk on the railing... but that's a future post). Something not shown in the video is something I have experienced before. Usually, when I step across the threshold of the safe house, they are in quite a hurry to leave the room, even to the point of pushing through me to do so. It probably would have happened in this case if we had not been under attack at the time. In the second clip, we were at one of the intermediate buildings on a map. We had run inside, closed the door, stocked up on ammo and health packs, healed ourselves and whatnot. I opened the door and left the building. The video picks up as I look back inside realizing that my pals didn't seem to want to leave. This was different than the first clip in that the trigger was not leaving the room. There was a Boomer behind the building that I could hear. Even when the Boomer came around the corner and started waddling toward me, they didn't move. Only when I fired my weapon did they decide it was time to rush out. Now, for the explanation. It seems that Valve is using an HFSM (Hierarchical Finite State Machine) or another such tiered approach (a behavior tree can cause this as well). There is likely a high-level state that we will call "In Safe House". When in this state, other lower-level states are things like "random wander," and "random comment." The only thing that seems to override it is if they see a zombie outside a door (many of the safe house doors have those barred windows). They will actually engage and kill zombies outside the safe house from inside the door. Therefore, there is an "engage/kill" state that is contained under "In Safe House". On the other hand, another high-level state is "In the World". It is in this state that the AI spends most of its time. Apparently, "stick with the player" and "defend the player" are only included in this high-level state. That is why they would not follow me down the stairs while I was still in the safe house or defend me when I got attacked. However, once I crossed the threshold, a message was sent to them to change states to "In the World" at which point, they were free to analyze their usual parameters such as distance (move to the player) and threats (defend the player). Note that this would not have been a big deal if I had simply stepped out the door. Alternately, in other safe house situations, the random wander location is in sight of the door. Therefore, when I got attacked, they would have likely seen the zombies and fought back. This particular arrangement did not allow for that. Now, I don't know what happened with the building in the second half of the clip. Because that isn't an "beginning/end of level" safe house, I would suspect the above rules don't apply. Why did they not leave, then? I have seen other behaviors where they don't seem to follow me like I would expect, but I have usually found other explanations for that (another post on that later). In this case, it would have made sense for them to leave along with me just like they tend to stick close in other circumstances. That leads me to believe that there was an artificial state in play that led them to believe that they were supposed to be there (or rather had yet to convince them it was time to leave). Regardless, in this case, the obvious trigger was me firing my weapon. This was not the case in the safe house example. Neither of these issues is dreadfully wrong in a gameplay sense. They are only noticeable in certain circumstances. And certainly the companion AI in L4D is better than some we have seen. However, when issues like these happen, they do make us pause and ask "what are you guys thinking?" Therefore, while the logistics of the game may not be affected too much, the perception of the game is. It breaks that coveted suspension of disbelief by making us ask (in typical gamer parlance) "WTF?!?" A simple solution would have been to pay more attention to what was under the HFSM state of "In Safe House". Alternately, have more than one trigger to transition from "In Safe House" to "In the World" would have been better. For example, opening the door is an obvious trigger that it is time to go. Getting attacked certainly is urgent enough to warrant attention as well. Additionally, abandoning the rigidity of a HFSM could be the answer as well. Much of the problem would be solved by using a system of free-floating priorities such as what I describe in my book, "Behavioral Mathematics for Game AI". In that arrangement, you can generally dispense with the state/transition model in favor of one that always has all possible actions in play through a system of calculated utilities and priorities. Something similar to this is probably already in effect in L4D for things like target selection, action selection (fight, heal, reload, etc.) and other actions. Therefore, extending it to cover the situations covered above would not be terribly difficult, in my opinion. Anyway, all in all the companion AI seems to be fairly decent. As we AI programmers know, companion AI is a beast simply because of how involved the companion is with the player. There's more scrutiny, more options of what to do, and far more potential for the "WTF?" moment and the ensuing frustration. I think that companion AI is the next frontier of game AI that we are already in the middle of. L4D is in the vanguard of this movement and doing an admirable job of it. Remember to click the tags below for more Post-Play'em observations on Left 4 Dead and other related subjects! Also, if you liked this article, please take a moment to submit this link to StumbleUpon, Digg, or Reddit. I would appreciate it, as would many other game AI enthusiasts! Labels: AI, Companion AI, FPS, FSM, HFSM, Left 4 Dead
Monday, January 21, 2008 First Encounter with F.E.A.R. Ok... this isn't necessarily going to be a full-fledged review of all of the AI in F.E.A.R. (Monolith studios) Actually, to do that justice may take an entire book anyway. However, I have been playing it for a few days. One of the reasons that I had to get a hold of it anyway (I bought the Platinum Collection) is that I also got my hands on the SDK. It is a special treat to be able to see the actual code that went into making this ground-breaking gem of a game.Anyway, I had a taste of the game a few months back via the downloadable demo from Gamespot. Even with that brief glimpse I was impressed. Now that I have been able to "dork with it" (research term) a little more, I have found myself saying a few things that surprise me. "Son of a bitch! Where did he come from?" This usually occurs when I fall into old patterns of thinking that the enemies are going to generally either stay put or move toward me in something resembling a direct assault. The first time this happened was on one of the more open, but box-laden arenas (which I am realizing was a design decision to show off this exact effect). I was slowly closing on a group of enemies... or at least where I thought they were (more on that later) when I get pegged from behind. Now this isn't a "Doom 3" sort of assault (see my post on the subject) where the game either spawns a monster directly behind me or pops open a completely illogical hidden panel in order to literally kick me in the ass. As I thought about where this dude could have come from, I realized that it was one of the enemies that had been in front of me... but off to one side. He actually had circled around some obstacles and come up behind me. Sure, he probably didn't realize that I had moved until he reached the spot where he had last seen me - but then rather than stand there, he continued on the only logical way I could have gone until he did discover me - and proceeded to politely pop a proverbial cap in my ass. Score one for the bad guys. "Get your butt back here, wimp!" Again, unlike shooters that I have played in the past, I encountered something that was actually almost frustrating in the novelty of it. It was realistic... which actually took some getting used to. When I would engage an enemy, they were just as likely to fall back as they were to move forward. I may take a shot or two at them only to see them walk, run, or dive around corners. They weren't just going to cover, they were pulling back. This left me in the uncomfortable spot of having to move into a hostile environment where I knew dudes were camping for me... a position that I have always tried to put the enemy AI in. Now I know how effective it is - since I don't really relish having to be the one doing the hunting. "I don't have all freakin' day!" Rather the opposite of above, I have tried to fall back to patterns of "agro-ing" the enemy and then dropping back to wait. As often as not, they don't fall for it. If they know I'm there, they may very well not come for me - especially if I have nowhere to go. I'm used to being quite comfortable simply waiting around a corner with a shotgun to my shoulder ready to multi-perforate the first moving object that shows itself. I wait... and I wait... until I hear "Flush him out!" followed by that delightful ping of a grenade rattling around at my feet. Crap! But do they just come running dumbly around a corner like my cat hearing the food in his bowl? Nope... I gotta come to them. "Would you show yourself, damnit?!?"Somewhat related to the above is their stubborn insistence on using cover. Yeah, using cover is cool. We've been talking about it at GDC roundtables and message boards for years. For a while, AI programmers were all happy to use preset "cover points". In a general sense, they looked good... but they were easy to exploit by just being in a place where that specific cover point was not truly a cover point at all. I get a feeling that these assholes would be perfectly comfortable playing hide-and-seek in a round room with a round pillar in the center of it. They seem to process cover the same way that a human does... "can this specific spot be seen by that dude over there?" It gets really frustrating when I get into peek-a-boo mode with a guy. The enemy may position itself in the shadow zone of a strip of wall, a column or something to take cover. If I peek around one side, he will move a little to keep the cover between us. If I move to look around the other side, he moves also. There isn't any invisible pre-defined spot that he's on, he's simply trying to not be seen. It pisses me off! "Quit acting like you guys like each other!" [Cascade this from above...] If Ol' Chuck there is running to cover like the little bitch that he is (my language gets salty when I'm pwning), do me a favor and let me gun him down like an arcade ducky. Do NOT annoy me with suppressing fire and all that military squad nonsense. He's got his back turned and I want to blast him before he gets to that box because, once he gets there, we have already determined that he's not going to show me anything more than the barrel of his gun for the next 20 minutes. You really are not helping me out by scattering an endless cornucopia of metal alloy in my general direction. It really is distracting and makes it awfully hard for me to jump out here in the middle of the doorway and calmly aim down the sight at his weenie little ass. You act as if he's on the same team as you or something! What the hell is wrong with you, anyway? Sheesh! "OK... that's not funny anymore!" This was my latest little adventure. I finally met up with one of these "Watchers". They are like freakin' Spiderman The Rabbit Puncher. The first time I saw one, I thought it was one of the hallucinations again so I didn't think to actually shoot it until it walked up and bitch-slapped me... and then disappeared into the damn ceiling before I could blink. Uh. Ok... that was odd. Until, from the corner of my eye, I saw him (or his buddy) swing down from the ceiling, off the wall, over the desk, smack me on the butt again, and then perform a similarly frenetic egress.For the next 3 minutes, I was twitching around all over the place like I was going through the DTs while on LSD. These two dudes were zipping up, down, "over, under, around and through" so as to keep striking me from behind. If I turned and saw them in time, they were just as likely to about face and retreat and replan. I began to realize that "replan" is exactly what they were doing. This wasn't a pre-set script to whack me when I got to a certain location... they were making this up on the fly (crawl, leap, cling, whatever)! I finally managed to pop one with the shotgun but the other got me. I was too shaken by the fact that they were actually being clever that I had to quit... and start writing. Damn. I'm not sure what I want to do now. Crawl through a billion lines of AI code spread across 100 different AI classes so I know what they are doing... or keep playing so I can experience it more and maybe put myself into a position where I can actually understand some of the more esoteric stuff that I encounter in the code. Right now I'm too shaken up by my encounter with real AI to do either one. Maybe I'll go play Doom 3 instead. For some reason, creepy lighting and environments and stupid enemies is not as daunting as generically bland lighting and environments and monsters that actually act like they have a brain for a change. Congrats to Jeff Orkin and company - I'll see you next month at GDC. I will be honored and excited to meet you and "talk shop" such as it is. But don't be surprised if I have a PTSD reaction and slug you before you get a chance flip over that damn table and hide behind it. (More on F.E.A.R. AI at AIGameDev.com) Labels: AI, Doom 3, F.E.A.R., FPS, line of sight, Monolith, planning, using cover
Wednesday, January 16, 2008 Driving Crisis in Crysis
Just a brief note as I played through the downloadable demo of Crysis. I was curious about the AI. The reason stems from a GDC a few years back - one of the AI guys I was having a beer with pointed out on a nearby playable setup of Far Cry that you could lure the enemies into the laggoon, make them tread water, go get more enemies into the lagoon, and when you collected enough of them, lob a grenade in to where they were happily treading water. Well, I wanted to see how Crytek improved since then...
Well, I was intruiged at first - the enemies looked like they were doing cool stuff. When I quit for a while, I found the massive number of AI videos on YouTube about Crysis. They were all about the dumb stuff the AI does or doesn't do. How come I hadn't seen this? I realized that it was because I was playing the game the way it was supposed to be played... I was letting the AI agents play their roles without challenging them. The guys in the videos were stepping just outside of the parameters at times and the AI would get stuck in a particular animation/behavior and not adapt. In the example below are some fantastic examples of the AI being almost confused. And this is just a sample of what's on YouTube. Well, I went back to playing the next day. Almost immediately I had a situation arise that had me shaking my head. I had driven a jeep along the road for a bit and then decided to hop out - leaving the jeep blocking the road. Soon, an enemy jeep approached from the other direction. I watched from the rocks and trees beside the road as the jeep drove up to mine and, in an effort to stay on its patrol, ran up onto the front bumper of mine. It stayed that way, its front wheels spinning a few feet off the ground. The driver and gunner were oblivious - still stuck in their animations as if they were still out for a Sunday drive. So, 2 things went wrong - they didn't react to the fact that my jeep was in their way and adjust their course accordingly. Second, once they were stopped by the physics engine, they didn't react to this fact. I should have stepped out of the bushes to see if they would have even noticed me at this point (like the boat drivers in the video above didn't notice people). It's a shame that Crytek got so close and so convincing on some things - but has such massive gaping holes in others.
Sunday, December 9, 2007 Technical AI reviews at AIGameDev.com Not to distract attention from my blog, but my friend, colleague and co-author in AI Game Programming Wisdom 4, Alex Champandard of AIGameDev has a brilliant series of articles on his site. They are technical AI reviews of major games that are written in a bulleted sort of fashion such as "21 tips from [Title] to use in your game."Much of the time there are links to interviews or write-ups by the AI designers themselves that Alex uses to put together his lists. Often, that is where the true meat of the entry is. The content is definitely geared towards the programmer or designer, but much of it can be digested by the game enthusiast as well. The best part is if you have actually played the games as well so you can have a peek under the hood and see what was causing it to be so engaging. Since Blogger allows me to paste in urls automatically, I'm going to cheat and paste links to each of the articles:
Anyway, after completely immersing yourself in the AI wonderland that is AIGameDev.com, please remember to stop back by here once in a while! :-) Alex would want it that way, too! Labels: AI, AIGameDev, Creatures, F.E.A.R., Facade, Façade, Halo, SimGolf, The Sims, Thief, Total War
Friday, November 30, 2007 Call of Duty 2: "I saw that grenade coming!" Another quick observation from my perusal of "Call of Duty 2" for Xbox 360. I've noticed rather often that, when I toss a grenade, the intended "recipients" seem to know that it is coming as soon as it leaves my hand. They will yell some German variant of "Holy crap, there is a grenade! Run, dude!" This is all well and good if they are seeing the grenade coming and would like to amscray prior to its arrival. However, the quirky behavior comes in when I am doing something like bouncing it off a wall around a corner. I will hear them shout prior to the offending pineapple even making it to the corner that I am trying to circumnavigate. In other words, they either saw the grenade through the wall, or there is some sort of mirror-like sheen on the wall that allows them to see it coming. The programmers seem to be using a messaging architecture wherein an event triggers a reaction in all agents within range. For example, if the grenade were to explode in front of them, the explosion itself would send a message out to nearby agents saying "if in range, die violently". Messaging architectures are opposed to polling architectures where the agent is constantly looking through his environment to see if there is something to react to. Using the same example, the agent would constantly have to scan the nearby world to see if a grenade has exploded. Since grenade explosions are relatively rare, this would be a lot of wasted CPU. As you can see, messaging architectures are more efficient for event based situations.In this case, the landing area of the grenade is roughly calculated. If the projected landing spot is near an agent, they react appropriately. They yell out warnings and move away if necessary. However, the programmers would have faced a quandary as to when the grenade itself should send a message. If you wait until it lands or bounces off of something, it would discount the very possible scenario that they could have seen it flying through the air in the first place. If it is triggered when it is thrown, it creates the issue I observed above - that they know it is there despite the fact that they should not be able to see it at all. One solution (albeit not a very efficient one) would be line of sight checks along the path of the grenade. Once a grenade launch has happened - and a message dispatched to the agent - the agent would now have to do a line of sight (LOS) check. If the grenade is visible, all is well - react appropriately. If it is not visible, the agent would have to change techniques to a polling architecture specifically doing periodic LOS checks at the grenade. When you consider that there may be 10 or 20 agents (friend and foe) in the area, multiple grenades in the area, and each agent-grenade LOS check would need to be done many times per second, the computational overhead adds up very quickly.Another potential workaround would be to create a plane that is the intersection point of the path of the grenade and the visible area of the agent. At that point, the "see grenade" event can be triggered once the grenade passes that point. That seems to be not much of an improvement since there would be as many planes as there are agents and the grenade would now have to poll the planes many times per second. The overhead would be similar to the first example. There is another way of handling that, however. Once the plane is generated, the distance from the source to the intersection of the plane can be calculated. Since the velocity of the grenade is near constant, the time delay until the projectile reaches the plane can be established. The message can be sent with a delay of x number of frames (or any other way that the game loop timer is built) so that the message is delivered and activated at the point that the grenade would have come into sight. No polling is necessary at this point. Just like before, a single event message is sent. The only additional overhead would be creating the planes representing the lines of sight for the agents in the area. In fact, if the LOS check is successful at the beginning of the throw, the plane creation is not even necessary. If an agent is going to yell to his squadmates about the throw, you don't need to do LOS checks for them at all - they already know. It would take some testing to find out how much overhead this eats up, but the result would be that you could do stealth/surprise grenades in a much more realistic fashion rather than the current "I saw it coming around the corner" effect.(More observations of "Call of Duty 2" for Xbox 360) Labels: AI, Call of Duty, Call of Duty 2, cheating, event, FPS, line of sight, LOS, messaging, polling, vision, XBox 360
Wednesday, November 28, 2007 Call of Duty 2: Omniscience and Invulnerability Enemy Invulnerability: "I can't be bothered right now." I was on the level where your convoy through the town in Tunisia gets ambushed. I had to start it over and over because I was getting pelted by the guys on top of the walls. I finally got down where I should hide and who I should tag first. One thing kept bugging me. There was a string of guys appearing on one wall in order. Most of them were gunners shooting at me - but there was one that had a Panzerschreck. I would try to shoot him over and over and he wouldn't die until he had fired at one of the tanks/trucks in my convoy and blown it up. In the mean time, another one would pop up and take me down. I realized that it was pointless to try to kill this dude at all. He wasn't going to kill me and that tank/truck was going to blow up anyway. It was part of the level. What annoys me, however, is that it took me a number of times before I realized that, until that guy got his shot off, he was invulnerable. As soon as he was done with his job (that I was trying to prevent) he was now able to be shot. I wasted valuable time and got very frustrated by the fact that the level designers had decided that this was such a required series of actions on the level that they would break the rules. I have found other instances where I have tried to peg some dude that was threatening me and was dead in my sights only to find that he had some sort of mission that couldn't be stopped. That really exposes the scripting in the game. I understand why the scripting is there - and, in general, it is very well done in the game. I very much love some of the actions that happen despite the fact that I can tell you the exact line I crossed in order to trigger the action - but usually they are too fast for me to react to or something that is meant to be just watched anyway. Don't let me point at a guy and unload an entire clip into his spleen while he doesn't seem to care that I am there.To me, it seems like this is a case of the "anti-sandbox" concept. Sure, a somewhat linear game like CoD isn't meant to be a sandbox - and there are certain things that have to happen to advance the plot. That's fine, but I always feel cheated when I can't change the series of events even if I do the right thing to disrupt it. Enemy Omniscience: "Am I wearing an orange hunting vest?" A possible solution to this is to measure how much of me is visible and then combine that with a coefficient based on how far "off center" I am from their current direction of vision. Perhaps another factor based on movement. I know that is a bit expensive to calculate for each AI (since their fields of view would all be different). Another potential solution is to cast multiple rays to different parts of my body - perhaps shoulders, head and a couple of lower torso spots. If more than ONE is visible, then I can be seen. Not knowing exactly what mechanism they are using, it's difficult to know how to improve upon it. This is even more alarming when it is obvious that there is a bias towards firing at ME. I may have 10 squad members all hidden behind objects and taking pot shots at the enemy - or even running around in the open, but damn it if the AI doesn't want to fire at me instead. It doesn't happen all the time, but it is obviously biased more towards me than my squad-mates. This is an obvious design decision to make it more exciting. I understand that. However, when combined with the omniscience above, it's kinda creepy. [note: I've realized that waiting to write one complete writeup on a game is sometimes prohibitive - so I will write as I think of things... and tag them by game so you can find all relevant stuff] Labels: AI, Call of Duty, Call of Duty 2, cheating, FPS, scripting, vision, XBox 360
Friday, November 9, 2007 Mario Kart: Double Dash
One of the obvious characteristics of the AI is its use of FSMs. This is something that is in use in most games today on some level or another. However, there were some distinct points where it was very noticeable that the AI was switching. For example, once you crossed the finish line, your team either went into “celebrate” mode or “whiny pout” mode. These were simply repeating animations that continued throughout the duration of the post-race promenade (for example, while you are waiting for your wife to finish because you left an ocean of banana peels for her to wade through causing her to look strikingly like Kristi Yamaguchi doing non-stop toe loops down the final stretch). However, if you are to get whacked in the behind by an errant shell, you will immediately transition into the crash state, then the “stunned recovery” state for a few cycles of the animation (about 2 seconds). Then, magically, you will begin to celebrate once again. It makes it very easy to see that there are very defined edges to the states (and likewise the animations).
There are some sub-states mixed in there for the more subtle animations, but they are usually very short-lived. The driving mode, especially, has extra states for turning, sliding, punching, taunting or even just looking around because there’s nothing going on. ![]() The reason that this became apparent to me was the first time that I saw two opponents in front of me fighting for the exact same stretch of road. There was more than enough room for them to maneuver, but they insisted on being in the same spot for some reason. What’s more, that “spot” was meandering back and forth along the course… as one car drifted left, the other went right along with him. As they drifted back, they did so together like Ben Hur’s chariot trying to dice up his competitor’s wheels. Not only was the path dumb and the colliding dumb, they were being dumb in sync with each other. Solution? Put a repulsion vector on each other so that following the path is not as high a priority as keeping from scraping paint.I’m not entirely sure what causes the AI to switch paths. Obviously an event like a spin or crash would cause the AI to pick up a new line. However, it is difficult to tell of the AI changes lines when nothing else is happening – like a cross-country skier stepping into a new pair of tracks. This does, happen, however. I’m just curious as to when and why. Certainly not when they are bumping and grinding down the straightaway, however. There is another factor, it seems, behind why the paths are the way they are. Not all paths are created for all cars. If the AI is in one of the big heavy cars, for example, they will tend to pick a path that wanders back and forth across the track. This is very noticeable with Wario’s purple beast. He drives like he has imbibed heavily. This is an interesting balancing mechanism – Wario’s car, like other larger cars, is fast once it gets up to speed. If that were left unchecked, once he passed you, he would be a bitch to catch up with. However, if that speed were spent meandering all over non-optimum lines, it slows down his progress and makes for a neat stylistic appearance as to what we get out of ol’ Wario’s character. It is difficult to know what exactly is happening behind you in the race except on such short tracks as Baby Park. Does Wario drive like a drunk moron when he’s 3 places back or only when he’s in front of you?That brings me to another point… rubber banding. The Search For Equality… Rubber banding is one of the most misunderstood aspects of Double Dash – and probably many other games that utilize this technique. Really, it is also a point that blurs the lines between AI, simulation modeling and the basic game design decisions. There is a staggering amount of this going on in DD.First there is the speed of the cars. In general, when you start a new “Cup” (group of races) and the game “picks teams”, the AI will also assign a general skill level for each car. Throughout that cup, the running order will generally be the same give or take a couple of places. The same 2 cars will generally be in the top 3 and the same two cars will generally be in the back of the pack. This is obvious after having finished a 16-race cup and having one car have a single-digit score – which is only possible if you are continually finishing either last or 7th. Also, if you are a trained professional like I am (I have to look into some form of Mario Kart accreditation or certificate), you will realize by about the 2nd lap of Luigi circuit which of the cars you will have to put up with for all 16 races. [misc. editorial rant: Damn big, fat Peety-head!]There seems to be three ways they go about stringing out the pack like this: 1) By simply using the published speed of the cars. The fast cars will tend to be toward the front, whereas the putt-putt-mobiles will be in the rear. That means that those first two cars you have to contend with as a good driver will be the big, fast cars. Labels: AI, cheating, FSM, Mario Kart, Mario Kart DD, racing, rubber banding
|
![]() |
Looking for the GDC AI Roundtable notes and audio? Content ©2002-2008 by Intrinsic Algorithm L.L.C. |
|
|
|
||