This stuff was complicated enough to fill 200+ pages of thesis, so apologies in advance for any areas that are a bit unclear in my condensed version here.
My PhD was based around the idea of embodied autonomous agents commentating on the events taking place in a virtual world. The idea behind this was a blend of two separate aims; allowing users to keep in touch with an environment they are interested in even when they are unable to participate (these users are called Viewers), while at the same time allowing the Participants in the environment to know when they're being watched. A balance between the rights of the Viewer and the rights of the Participant.
In simpler terms, I wanted to have a bunch of little AI guys milling about and watching a game while it is in progress.
I used Unreal Tournament for my prototype system, running the Gamebots modification in order to allow external processes (i.e. the agents themselves, running in Poplog and implemented using the SIM_AGENT toolkit) to connect to the game. Eventually I ended up with the idea of a "Studio" system for commentary, with different agents fulfilling different roles, such as:
- Reporters, the embodied agents in the game. These chaps attempt to follow the action on the ground, (hopefully) witnessing important events and delivering a summary of what they've seen. If they miss an event then they try to "fill in the blanks" based on what they see; for example, in a game of Capture the Flag, if they see a flag lying around in the middle of nowhere then they'll surmise that some unknown individual must have taken it, died there and dropped it.
- Editors, located away from the action. They rely entirely on what the Reporters tell them to maintain a more global view of events, using this knowledge to direct Reporters to known event hotspots. They also collate Reporters' observations in an attempt to work out what actually took place, filtering out inaccurate or mismatching reports.
- Presenters, producing the commentary that the viewers get to see. They take the collated reports generated by the Editor(s), and use these to deliver output to the Viewer in some appropriate format. Example Presenters could deliver output via a variety of different means, including in real-time as a bot in an IRC Channel and as an automatically updating webpage, and retrospectively as text-based reports.
You can check out a poster explaining these roles in more detail here (pretty big JPG image).
In order to support the idea of (mostly) impartial observers in a game of Unreal Tournament, I had to make a number of changes to the basic Capture the Flag game rules; namely, adding support for a third team (green) for the reporters to use, restricting the ability of members of that team to use weapons, collect flags, score points, and so on.
I also made a few other miscellaneous changes, such as allowing the game server to provide the pathnode network to agents on connection in order to allow them to use their own custom navigation algorithms, instead of relying on querying the server for a navigation path each time they wanted to move from one point to another; and implementing a proximity-based text chat system on top of the game's default text chat, thus requiring Reporters to be close to a Player in order to "overhear" communications, although this ended up being unused.
And when all the testing was over, I found it pretty amusing to hear people say that they used Reporters as a source of cover.
I've bodged together a fair bit of random stuff for Unreal Tournament in my free time, but a lot of it would be rather dubious to put up here - voicepacks inspired by such diverse subjects as Arnie, Kung-Fu Master (I'm not kidding) and Baldur's Gate; and a few assorted weapons that are mainly tweaks and/or rewrites using other people's stuff as a starting point.
So saying, here's a couple of things that I feel I can reasonably safely show off:
- Map: CTF-DeathFans. This is a Capture-the-Flag interpretation of the DMDeathFan map that was bundled with the original Unreal. All of the other DeathFan remakes I found didn't really do it for me, so I decided to have a go at cobbling together my own version. Pretty much everything in the map has been rebuilt from scratch, but it was my aim to keep it as faithful to the feel of the original as possible (while making it, y'know, actually fun to play in CTF and all).
- Mutator: ProjectileMutator. This unimaginatively titled mutator simply adjusts the speed and/or damage of all projectiles as they are created in the game. What this means is that you can make all rockets, ripper blades, flak shots and so forth move faster/slower and do more/less damage. Goofy fun.
- Mutator: DispersionDrop. Assuming you already have a mutator that allows you to use the good ol' Unreal-era Dispersion Pistol in UT, this little mutator will make it so that if you pick up a Dispersion Pistol while already holding one it will instead act as a Dispersion Pistol Upgrade and power-up your existing weapon. I always imagined this was how they would behave by default, but hey...
I've also made a couple of fairly small mutators for Unreal Tournament 2004:
- Mutator: PushAway. Based on the UT mutator of the same name, this allows you to set up weapons to fling players and vehicles around more (or less) than they do by default. I made this simply because the UT PushAway mutator was hilarious and I couldn't find a UT2k4 version of the same thing. I tried to get a decent screenshot to illustrate just how amusingly silly this can be, but it's surprisingly hard to capture good images of burning wrecks flying through the air...
- Mutator: DamageScaler. Simply multiplies all incoming damage by a configurable value. You can specify different values for players and vehicles. It doesn't work perfectly, but I don't consider it hugely likely that I'll fix it any time soon