Reaper bot

The Reaper bot is a weak AI expert system computer software program; created in the form of a modification or "addon" to the computer game Quake, the program was created by Steven Polge and written in QuakeC. Released on November 15, 1996.

Overview
The program is a Computer game bot and thus allows the human player to face the computer in a game of deathmatch in Quake—whereas this option is only possible with other human players in the stock product. The Reaper bot is highly notable in both artificial intelligence in general, community created game content, computer game bots and especially for Quake; due to i.a. its ability to learn arbitrary maps through machine learning and thus it represented a major breakthrough in bot AI.

Of interest is that Steven Polge was drafted by the computer games developer Epic to work on the Artificial Intelligence for the game Unreal (and later games), which had a significant impact on the whole first-person-shooter genre (such as monsters that can move and attack at the same time, reduction in monster numbers and increase in their intelligence).

Numerous instances of the program can execute simultaneously on a computer—with each instance of the program representing an individual bot, e.g. a player can play a game of deathmatch with 7 bots for a total of 8 players; the bot can also face multiple human opponents at the same time—e.g. on a LAN or over the Internet; the bot can also function as a stand-alone client program to connect to a remote server and play from a dedicated computer.

Features
The bot would give the player an experience of playing against another player on a level that surpassed all other bots at the time of its release; albeit minor missing features, such as the score of the bot and some faults in client simulation it was at the time the most advanced bot available.

The bot has at least the following notable features :


 * Ability to track and attack the player.
 * Dodge attacks by strafing or full circle-strafing.
 * Avoid obstacles and corners.
 * Can use doorways, doors, teleports, buttons and triggers.
 * React to nearby noises.
 * Weapon selection with understanding of the abilities of the various weapons and select the appropriate weapon depending upon the current situation
 * Avoid ledges.
 * Leap off ledges to gain something of value (e.g. an item).
 * Avoid landing in lava and slime when possible.
 * Understanding of the gravity level.
 * Swim in water, avoid drowning, jump out of water, understand it can swim to reach items under water.
 * Chase the player.
 * Flee from the player.
 * Dynamic environment mapping.

Utilizing heuristics with fuzzy logic for decision making gives the program a dynamic ability to be able to decide to flee, chase the player, or search for power-ups depending upon its current situation while using all of the beforementioned features in unison as needed; e.g. the bot has the ability to combine features such as accumulating power-ups while in the middle of an attack or defense. Another example, if the bot is attacked by the player, and the player decides to flee by leaping into water, the bot will consult its health, armor and current weapon capabilities, if decided to be sufficient to be likely to survive, the program will decide to chase the player; by doing so, it will combine at least its ability to leap off a ledge and swim.

The bot will attempt to get valuable items several times, but will give up (i.e. the iteration has a counter) if the item proves impossible to reach for the bot.

However, the most notable feature is as mentioned that of dynamic mapping, the program will roam arbitrarily by itself on an ad hoc basis and create waypoints to indicate the path to respective power-ups—weapons, armor, etc. -- once said items are located. Once the whereabouts of power-ups are known the program may use its internal waypoints to locate power-ups when the bot needs such items. The bot also has the ability to follow the player for the same purpose.

The bot will utilize its dynamically generated map to reach both static objects (e.g. items) and moving objects (i.e. players or other bots), the bot creates multiple spanning trees and dynamically merges routes in addition to caching the fastest routes for important items to optimize performance. The bot executes a continuous optimization process with a goal of always knowing the fastest route to the most valuable item of a given class (health, armor, ammunition, weapons) -- depending upon what the bot needs at any given time.

The program has a variable skill level system with an option of dynamic adjustment in proportion to player skill and the bots may play in teams or one on one.

The bot has a "personality" (compared to other bots) that is aggressive towards the player once it has sufficient power-ups but is reluctant in attacks prior to attaining such items. The program consists of 28597 lines of QuakeC code in total, including empty lines.

Criticism
The Reaper bot is noted for cheating by removing arbitrary power-ups from the map and gaining such items itself. The Reaper bot suffers from several minor bugs, flaws and missing features and is regarded as never having been completed and was aborted in a beta stage of development.