Gideon Bot v0.1 beta

Creator Matthew Turvey
Homepage none


'Let the review begin!' - The Reaperbot by Steven Polge (polge@ix.netcom.com) is the first successful bot written in QuakeC that can learn the level while playing. Polge, if you have not heard, is now working for Epic's Unreal. He is doing the programming of the AI for the new monsters. For the next six months, there has been no other bot capable of doing such a thing. In June of 1997, Zeusbot v2.05 by Jonathan E. Wright (nelno@ionstorm.com). Wright is now the AI guru at Ion Storm. Wright's Zeusbot is capable of learning the map but it has its problems. Mainly, the game will crash if you have too many bots on the map at the same time. But with few bots, the Zeusbot plays reasonably well.

In August, Turvey released a new bot that only very recently has been made public. This bot promises to learn the level while playing much like the Reaperbot and the Zeusbot. He calls his new creation Gideonbot. You can download a copy from CDROM.COM. The file to download is gidbot.zip and it is located in the quakec/bots directory.

The text file that came with the Gideonbot credits nobody. Therefore, it is safe to assume that he programmed the patch all by himself. The ideas maybe similar or even identical to other patches but the code itself belong to him. So it is only natural to compare this Gideonbot with the Reaperbot--the first ever bot to my knowledge that can learn the level.

When I downloaded the patch, I was very tempted to decompile the Gideonbot and merge it with the Reaperbot. This way I can determine which bot is better in combat. I may not be able to determine which bot roams better but I should be able to see any differences (if any) in combat tactics.

After looking at the decompiled code of the Gideonbot, I noticed very strong similarities. Yes, I did notice that the number of files in the source is smaller in Gideonbot. Yes, I did notice that the files they have in common have different number of functions. But I did notice similarities. For instance, the global variables that are defined in botit_th.qc of the Reaperbot code are now defined in subs.qc in the Gideonbot code. Many of the functions have not only identical names but also have identical statements in them as well--meaning these are the same functions. There are also functions with the same names but almost the same statements--meaning that there were some modifications to those functions.

Don't get me wrong. There are some differences. For instance, the waypoints no longer have 6 "movetargets" but only have four "movetargets". The RunAway function, which allows the Reaperbot to decide in the middle of combat to run away, is no longer part of the Gideonbot code.

The similarities, however, are too many to assume that this bot is not based on the Reaperbot. I have the decompiled Reaperbot code and I am the author of the first three tutorials on how to improve the Reaperbot code base for your private, personal use. Polge, author of the Reaperbot, sent e-mail to both Drywall of Inside3D (http://www.inside3d.com) and Dark_Skye of Scrap Heap (http://www.brutality.com/scrap) stating that it is okay to make and post tutorials on improving the Reaperbot. Polge, however, did not authorize anyone to release their own variations to the Reaperbot to the public. It is in my opinion that the Gideonbot is, indeed, a reaperbot hack. This is similar to the now discontinued Eliminatorbot v2.0 beta 6 by Perged and FuzzKatT but those guys did mention the name Reaperbot in their short text file. No credits or names of any other patch are mentioned in the text file that accompanied the Gideonbot. It could have been an oversight on the part of Turvey. These things do happen. However, if this were done deliberately, then that would be very uncool, unethical, and wrong.

If this is a Reaperbot hack (which I think it is), then how does it stack up? If you are going to make a patch that is based on some other person's work without crediting him, then at least this "new" patch must improve on that other person's work. Is it worth the download? Why bother to download a patch that you already have just because it is under a different name? This review will hopefully shed some light on the playability of this "new" bot.


First Impression - We can all thank Alan Kivlin a.k.a. Virtuoso for the bot ranking code. This code allows bot authors to "trick" clients into thinking that the bots are real players. Thus, these bots will show up on the status bar on your screen and on the TAB scoring table. Kivlin's code is publicly available and can be downloaded from CDROM.COM. Every new bot that comes out, I have come to expect that these bots will show up on the scoring table. I am very spoiled in this regard. Gideonbot does NOT show up on the scoring table. I was terribly disappointed to not see these bots on the scoreboard. I had to use the standard impulse (impulse 210) to see the scores. I find it a hassle. With only one or two bots, the impulse command is tolerable but with several bots or more, it is a real pain.

The Reaperbot is famous for its disappearing weapons bug. This is because in the weapon_touch function in items.qc, the function only checks to see if the touching entity (the one that is touching the weapon) has the FL_CLIENT flag. Unfortunately, the player is NOT the only one with the FL_CLIENT flag. The waypoints can also have this FL_CLIENT flag. Any waypoint that the player spawns for the bots will have the same flags as the player. So if the player spawns a waypoint right next to a weapon, then that waypoint can pick up the weapon. Rather than modify the weapon_touch function to limit the entities to "player" and "dmbot" instead of FL_CLIENT and "dmbot", Turvey decided that it would be better to not allow the waypoints to have the same flags as the player that spawned it. Thus, Gideonbot does not have the disappearing weapons bug. This is great but unfortunately, Gideonbot allows the players to PICK UP weapons while in observer mode. It appears that Turvey forgot about observers or decided those observers should pick up weapons. This is a great way to cheat against the bots or even against players if this patch is used on a server.

Just like the Reaperbot, Gideonbot is a "silent jumper" and the only sound you hear when he lands is the same old thud sounds. When you shoot a rocket at a player's feet, you can bounce that player around because real players suffer from momentum caused by splash damage or weapon hits. Several bot patches also mimic this. The Gyrobot (also known as the Indecisive bot) by Gyro Gearloose and my own unreleased Elima-Reaper mimics this. So it is not impossible to implement this feature. The code to implement this feature is already publicly available at CDROM.COM. My bot skeleton package contained in the file called btsk23.zip includes this feature. The source code for the Gyrobot is also publicly available. Gideonbot can not be bounced around like real players. This is obviously a disappointment for me as without this "realism" in the patch, the bots have an advantage over players. On DM4, for instance, a nicely placed rocket blast can propel you into the lava. You can not do the same with the Gideonbot.

Gideonbot does not appear to support any skins. I saw no mentioned of it in the text file and I did not see any code to support it. So if you were used to playing bots with skins, Gideonbot would be a real disappointment for you. Unlike the Reaperbot, Gideonbot do not spawn with the same, old tired original brown Quake skin. They spawn with the same skin colors as you. So if you are all red, then all the Gideonbots will be all red, too. If you change your skin colors during the game, then all of the bots will change their skin colors, too, to match yours. But unfortunately, all the bots still look alike.

Gideonbot will not decide to run away in the middle of combat. Now the Gideonbot can decide to "give up" if it is CHASING you but if it is attacking, then it will not give up. This is different from the Reaperbot. The Reaperbot can be right next to you but if you switched to a rocket launcher and the Reaperbot only has an axe, the Reaperbot will decide to try to run away. The problem is that by the time the Reaperbot makes this decision, it is far too late. The Reaperbot becomes such an easy target at this point. I fragged many skill 3 Reaperbots this way. The Gideonbot does not make this same mistake. This is the good news; the bad news however occurs when the Gideonbot is at a distance and not right beside you. For instance, suppose the bot is 400 units away from you and the bot is in full view. He is trying to attack you but there is a gap between you and the bot so it can not get any closer. The bot eventually runs out of ammo and begins to swing his axe like a madman. You then switch to a rocket launcher. Now at this point, the Reaperbot will decide to run away. The Gideonbot, however, will stand its ground. So picture this, the bot is swinging with his axe and you have a rocket launcher. Who do you think will win? With the Reaperbot, you can use the bot's fear of death to your advantage. With the Gideonbot, you can use the bot's fearlessness to your advantage. A balance between the two extremes would have been nice.

Gideonbot does not support any team play. If you like playing on teams, then this patch is definitely not for you. When you exit the level and enter a new map, the game will not print out a message saying that the bots have respawned. So it looks like that there are no bots in the level when it reality, all the bots have respawned with you. You are going to have to simply walk around until you find the bots or they find you.


Movement - Those of us who have played the Reaperbot, BGBot and other bots are often frustrated by the bot's inability to move on certain types of terrain. This makes the bots an easy target sometimes. In the rocket launcher corridor of the START map (also known as the Introduction level), the Reaperbot has difficulty moving in that corridor. The only effective way for the Reaperbot to move from point A to point B is by jumping. If you attack the Reaperbot in this corridor, the bot's ability to strafe is effectively negated. It can still jump and it can jump towards you efficiently but its ability to dodge weapons fire by strafing is practically gone.

If the bot is roaming around by itself, the bot appears to "camp" in this corridor. The constant jumping makes it obvious to a human player where the bot is since we humans can hear the thuds. That is the only room that encourages the bot to make so many thud sounds. Gideonbot is no different from the Reaperbot in this regard. There is, however, a cosmetic difference. Gideonbot has a habit of jumping sideways. The Reaperbot will face its goal before jumping; Gideonbot does not.

Gaps are a major obstacle for the Gideonbot. It appears worse than the Reaperbot in this area. On the START map, I would use what I call the observer trick. I would switch to observer mode, position myself so that the bot can see me, switch to normal mode so that the bot will attack me, then switch back to observer mode so I can not get hurt by the bot's attack. On this map, I would pick up the rocket launcher and return to the single-player restart area. I would then jump over the lava gap so I am right next to the health box. I would switch to my single- barrel so I would not be holding a rocket launcher. When the Gideonbot is in view, I activated the "observer trick". The bot will, of course, try to attack me. Since I am in observer mode, I can not get hurt. The bot will eventually run out of ammo and begin to swing his axe. I then switch back to normal player mode so any attacks from the bot can now hurt me. But the problem is that the bot never jumps over the gap to hurt me. The axe obviously can not hurt me from a distance. When I switched to the rocket launcher, the bot is still swinging the axe. There was nothing I can do to convince the bot to either jump over the gap or run away. See Figure 1.

Ledges appear to be more of a problem with Gideonbot than with the Reaperbot. Again, on the START map, I would walk towards the water pit and pick up the red armor. The Reaperbot is very capable of picking up the red armor. The Gideonbot, however, can not pick up the red armor. There are three reasons for this. First, the bot sees the nailgun and tries to get it. It can not since it does not jump over the gap. It tries and tries and tries. Yes, it will eventually give up and walk away. But then, it will walk back to the ledge and try again. It does this repeatedly over and over again. This reminds me a lot of Zeusbot v2.05. Zeus has a habit of doing the same thing. It can be very boring watching a bot try to get the nailgun.

The second reason is that the bot has a habit of constantly walking back and forth, back and forth through the teleporter. Once it walks through the teleporter, it turns around and walks through again. So it much less inclined that the Reaperbot to walk up the steps to the water pit.

The third and final reason is that the bot refuses to jump into the water. Due to the first two reasons above, I had to use the "observer trick" to force the bot to walk up the steps towards the water pit. I would jump into the pit but the bot refuses to follow me in. It eventually ran out of ammo for its shotgun and begins to swing the axe. Still, the bot refuses to jump in. It will eventually enter "chase mode" and decide to give up. On DM4, if you try this "observer trick" when the bot is on the "Quad ledge", the bot will never decide to give up since it does not switch to "chase mode".

The difference between the Reaperbot and the Gideonbot in regards to movement should be obvious--Turvey made some changes. Besides the Gideonbot's reluctance to jump over gaps or jump into the water pit, I have also seen the bot face the wrong direction when firing its weapon. While I was in the water pit, I have seen the bot look like it is firing its shotgun while facing either left or right. Most of the time, the bot is facing the correct direction but sometimes it is not. I know, for instance, that ID's movetogoal function (which both the Reaperbot and Gideonbot uses for movement) has a really, really stupid habit of changing the direction the bot's model is facing. The key phrase here is "the bot look like it is…." The bot is actually firing in the direction it is facing--at you. But in the very next frame or at the end of that frame, it is trying to move. This is where the movetogoal function comes into play. It changes the direction the model is facing after it executes the firing function.

In the Reaperbot, this annoying bug is masked. This is accomplished by using the walkmove function. The Reaperbot uses walkmove function for strafing. The Reaperbot not only strafes left, right and backwards but it also strafes FORWARDS as well. Gideonbot does not do this so it does not mask this stupid (cosmetic) bug.

Like the Reaperbot, the Gideonbot can swim but there are problems in this area, too. Yes, the bot does go up for air so Gideonbot is not very likely to drown. However, the bot appears to move just as fast in water as it does on the ground. On E1M4, I again used the "observer trick" and the bot fights very well. That is, it fights well until it has an axe. While swimming on the surface, the bot can fire away from a distance since it is glued to the surface but once it has the axe, the bot becomes helpless while on the surface. If either you or the bot is underwater, the bot is able to move towards you but not while both of you are on the surface. While glued, I have seen the bot JUMP up towards me. You as a player can not jump out of the water unless you are near a ledge in front of you. There was a "ledge" near the bot. The ledge was behind it (the one with the rocket launcher) but it jumped FORWARDS towards me. That is obviously not right. The worse part is that the bot does not even need a ledge nearby to do this trick (see Figure 2).

The bot did show some swimming improvement over the Reaperbot. The Reaperbot has a really bad habit of always swimming on the surface. The Gideonbot, however, does not have that problem. It will swim below the surface so it can find you making it more difficult for the player to attack the bot by surprise. You are going to have to use your brain for once to defeat this bot. It is possible, as I have been able to kill the bot while it was swimming on the surface. Just time your attacks. Do not go blindly shooting the bot. When it goes up for air, make your move. The bot will be swimming on the surface for a little while before it goes back down. That is your window of opportunity. Use it well and do not bitch and moan in the newsgroups because of your lack of skill.


Combat - There is not much difference between Gideonbot and the Reaperbot. This Gideonbot is supposed to be pretty good in chasing but I saw no improvement over the Reaperbot. Gideonbot will not decide to run away in the middle of combat so the bot is fearless and more ruthless. I have seen it pick up items while attacking like the Quad on the "Quad ledge" on DM4. It is able to use most of the weapons effectively and it moves while firing as well. But as we have all come to expect with bots, they have a problem of ignoring its own grenade especially quad grenades. It does not realize that if a player is too high or too far away, the grenade launcher is not the right weapon to use.

So if you are 2000 units up and the bot sees you, it will still fire its grenade launcher. The problem is with the code itself (obviously). The code does check to see if the target is too high. In this case, if it is greater than 175 units, the value for the variable rng is set to RANGE_FAR and this will prevent the bot from selecting the grenade launcher as its weapon of choice. Unfortunately, a double-equal sign is used to assign the value. That is, Turvey wrote this: "rng == RANGE_FAR;" instead of "rng = RANGE_FAR;". That does not make any sense so the value of rng is not changed.

Like the Reaperbot, Gideonbot uses the function called checkclient to locate real players as targets. This is executed BEFORE it searches for other bots as targets. The result is that the bots will select real players as targets first before it sees any other bots. The problem is that once a target has been acquired it will not bother to search for bots as targets. So do not be surprised if two or more bots appear to gang up on you.

Like the Reaperbot, Gideonbot has the ability to shoot straight up or straight down. In certain situations, this can give the bot an advantage over real players since players can NOT do that.


Navigation - The poor movement really restricts the bot's ability to move around the map--more so than the original Reaperbot. I would walk around the ENTIRE level and still the bot is unable to visit certain areas of the map. Since the bot uses ID's movetogoal, it is expected that the rocket launcher corridor on the START map will give it problems. For instance, it can get out of the corridor but it can not get to the lightning gun. And it spends far too much time at the lava gap ledge. And it never bothers to even jump into the water to get to the red armor. When I spawn more than one Gideonbot, most of the action is near the single-player restart/lava gap area. All the bots tend to migrate to that area. Don't expect too many Gideonbots being armed with any of the nailguns on this map.

The good thing about this bot is that it learns the map as it goes along. So it "knows", for instance, where the rocket launcher is once a waypoint is spawned near it. This should not be too surprising since the bot is based on the Reaperbot. It is just too bad that the movement hampers the bot so much.


Misc - 1) Gideonbot does not scream the correct pain sounds while underwater. It does not blow any bubbles, either. And when it died on E1M4, I saw no death bubbles.

2) Unlike the Reaperbot, the monsters are ACTIVE. This means that the monsters can go after you and kill you. If you want your single-player games to be more of a challenge, spawn a Gideonbot. The bot and monsters will go after you. This is a deathmatch bot only. It will not help you fight the monsters and, obviously, the monsters do not see the bot.

3) Gideonbot does not get hurt in lava that is ankle deep. On E1M8, I again used the "observer trick". I have seen the bot circle strafe me while in lava! That is obviously not right. So I thought to myself, maybe being in observer mode had an effect. Unlikely as that sound, I decided to find out. So I switch to normal mode. Obviously the lava killed me. I then saw the bot pick up my backpack. He then turned around it walked over to a ledge but didn't jump. I then saw the bot walk over to another ledge but didn't jump. Then finally, it walked around and then jumped out of the lava. The bot did not die at all throughout this "ordeal". The bot CAN die in lava (like on DM4) but it can not get hurt with lava that is just "ankle deep".

4) Although bots can respawn when you exit the level and enter a new map, it will NOT respawn when the time limit is up.

5) Bots do not respect the fraglimit. So you can set the fraglimit to 20 if you want. Only you are expected to follow that rule.


Recommendation - Yes, there were some improvements. For instance, it is much harder to sneak up on the bot while it is swimming, disappearing weapons bug is gone, and the bot will no longer try to run away when it is already right next to you. But there were also many new drawbacks. Bot does not know when to quit while attacking. Bot is far less likely to go to areas that the Reaperbot can go such as the red armor room on START map. Players now have this new ability to cheat while in observer mode. Bot did not die on E1M8 while in lava. Bot will decide to fire the grenade launcher even if you are 1000 units above it. The Reaperbot did not do this. The Reaper will not fire if the target was greater than 175 units above the bot. Gideonbot will. The bot can now jump sideways and that it can now fire in directions it is not facing. The bot is unable to chase you into the water pit on START map. That is a great place to plan your escape. Then there are the old bugs that the Reaperbot has that have been carried over to the Gideonbot. For instance, the Reaperbot will target players before bots. The Gideonbot does the same thing.

In short, Gideonbot does not appear to be better than the Reaperbot. In my opinion, the Reaperbot is better. If given a choice, I would download the Reaperbot rather than the Gideonbot. In fact, I think I like the Eliminatorbot v2.0 better than the Gideonbot. I would give this bot a 60% rating. It is definitely better than BGBot. That is for sure. If this bot was made last year, then obviously I will give it a better rating. But I have seen better bots and bots with more features. Keep in mind that this Gideonbot is still in the beta stage even after one month of testing so there is still [much] potential for improvement.

  


Figure 1
..i'll mess with you..



Figure 2




Rating: N\A
(somehow, there where
no ratings included)