FlexBot is essentially a
mod. It is a
system that provides a framework for developers to create 'bots', or
simulated players, for participation in multiplayer games along with
other humans or bots. The developers of Half-Life, Valve Software,
publicly provided an SDK for the Half-Life engine which has been
available for some time. This has led to a proliferation of 'mods', i.e.
new programs based on the Half-Life model. Furthermore, within the
system is a 'fake client' option which allows non-human characters to
participate in a standard multiplayer game controlled by the host
computer. As a result, a small community of bot developers has sprung up
around the Half-Life engine.
robot hackers by trade, we designed the interface to the Half-Life
engine in a manner that we were familiar with. The FlexBot interface has
a clear set of sensors and actuators. The programmer is responsible for
the "think" function in between. Any calls to the Half-Life engine are
done entirely through the provided interface. This has the advantage of
shielding the bot developer from the inner workings of the Half-Life
engine, providing a clean and simple interface for rapid development.
However, the disadvantageous side of this is that the bot developer has
access to no more information than the interface provides.
Unlike other APIs such as those provided by
Gamebots, we do not explicitly present the user with a tcp
socket interface. Instead, we assume that any bots will run concurrently
with the game server on the same machine. It is an explicit goal of ours
that any bots built should not tax the host machine much, and should be
able to co-exist with the game server. We feel that, from a game
programmer's perspective, it is better to assume that our users are the
common players who only have access to one machine at a time. However,
it is worthy to note that adding a socket interface to an external
client bot machine would be trivial in FlexBot.
FlexBot is written in C++ and the bot behaviors
are DLLs residing in a pre-determined sub-directory within the Half-Life
installation path. Bots can be written in any language which can
generate a Windows DLL.
FlexBot is meant as a testbed for experimentation. We have used it to
implement some theories and ideas about games that our group has come up
with. Since our group is primarily concerned with higher-level concepts,
FlexBot is a nice tool since it abstracts away much of the lower level
nitty-gritty details and affords a rich environment in which to
experiment. See the
projects page for
some of the ongoing projects that we're working on using the FlexBot
Furthermore, FlexBot is
also a teaching tool. Its interface is reasonably simple and
well-documented. It was used in the
Behavior-Based Robotics class as a simulator on which the
students could implement some of the ideas they had been taught. These
students also acted as the first large beta-test group that the FlexBot
architecture has been through. We're happy to report that, in general,
FlexBot was stable and presented no large showstopping bugs.