URCS Quagents Home

Quagents: Overview

Quagents and Bots

See the Quagent Technical Report

The model we are using is that the bots in the Quake II world are strictly hardware. In a real game, they have "think" functions that may or not have "mod" capabilities can be modified by the players. In Quake II, as we have seen, the bots come with a certain amount of Innate Intelligence , which we have ruthelessly stripped out.

For us for now, they are commandable with a finite set of commands and they have certain reflexes that prompt them to tell you about certain events. All the intelligence therefore is offboard, outside the game, in the programs you write (presumably in Java or Lisp or C or C++). You can communicate with the game and vice versa (again, for now) only through a protocol. Your program sends and receives strings with keywords and parameters (and you can receive binary data as well). The Quagent is thus the combination of the bot in the game and your controlling software.

You can spawn multiple bots. Each one will have its own "private line" through which you communicate to it, so you won't get them mixed up.

Objects in The Quagent's World (or Quagent Ontology)

The entities in the Quagent's world may change as we add more functionality. The issue is the Quagent's state, perceptions, actions, and what are the interesting objects in its world.

Quagent State

Quagents have an internal state influenced by what happens between it and the world.

Laws of URQuake

You can discover for yourself how the game works: there is something like normal physical laws running the show, but there are many tricks being used so some information you think should be available is either not there or hard to get. The following laws define special ways our Quagents react to things in the world. System Parameters. These are set by the system and are not settable by the user: (so far chosen pretty much at random -- CB).

For rays or radius, if M is the max we want to compute, I is the initial max, and U is the maximum max we can have, how about
M = I + (U-I)* min(1, (Wisdom/High_Wisdom)). So you max out your perception when wisdom goes to 100.

Quagent Communication and Interaction

As of this writing (1/27/04) communication between quagents (not bots) is easy if they are all running in the same program. It may be a little harder (and non-uniform) if they are not. Right now we are not using game facilities to do communications since they are set up for client to client communication.

As of now, think about the quagent programs, the controllers, communicating, not the bots communicating. It's like the language and reasoning centers are up in the controller. So one quagent can broadcast, or target another particular quagent, or all quagents within some distance, with "messages" that can be interpreted by the other quagent (controller.) Thus stylized behaviours, or sequences of actions, can be scripted: Quagent A can be low on GOLD but have a lot of HEADs, so it could broadcast "OPENFORBUSINESS", whereupon B could decide to swap GOLD for a HEAD, and so the controllers would cooperate by running off the necessary walk-over-to, drop gold, drop head, pickup head, pickup gold actions.

Likewise there could be a STEAL interaction that could be built same way, failing if the desired item is not held, OR one could implement the capability of A inquiring of B what its inventory is. Again the whole transaction would be mediated by the quagent code, not the bot code.

A good quagent-quagent communications protocol would be a nice contribution.

If You Want To Play God...

Just generalizing from the last section a bit. If you think about it, some of the basic laws of how bots interact with the world could easily be enforced by your quagent controller. For instance, to enforce weakening around kryptonite you'd write the same thing we did...check for kryptonite and decrement some "health" variable accordingly. In fact there is no reason you can't build complex phobias, social behaviors, health quirks, prioritized but conflicting motivations, whatever! The causes, effects, and interactions can all be overseen by the quagent controller. This would be just another layer of simulation overlaid on the existing minimal bot capabilities. So don't be frustrated if the bar bots seem to have a minimal inner life (sort of a physical body and maybe an id). You can build the ego, superego, etc. in the controller.

Another way of saying this is that you can build and extend many quagent functionalities yourself and you should not feel constrained by the limited amount of on-board "wired-in" bot characteristics we supply.

Quagent Protocol

Bots are controlled by and communicate with quagent controllers using the Quagent Protocol .


Last updated:    by costello