File Details

Download this file | Go to files list

= SABot - Stupid Angry Bot - A Multiplayer Bot for Quake 4 =
It won't eat, it won't sleep, it absolutely will not stop, until it does something stupid.
Version: Alpha 10 - "I obey these words, written in my head. I think they are spelled wrong."
Date: 2005-08-08
Author: Jarad "TinMan" Hansen
Site: http://www.oakbots.co.uk/forums/viewforum.php?f=7

NOTE: This is an Alpha version.
While theoretically the worst that will happen is the game crashes, I hold no responsibility if your computer explodes in a ball of incandescent fury.

= ChangeLog =
Just an update to Q4 1.3, quick hack, 80% broken, support for deadzone gametype.
Minor bug fixes.
Now based off new fake-client framework worked by custom, John, gauss.
Bot's persist over map change.

= Note for previous users of SABot =
Do a fresh install, don't install to an existing installation (rename that fisrt then bring over any stuff from that you want to).
The aas compiler has been updated by custom, the command is now runbotaas. You should recompile custom map aas files from scratch rather than copy them from your previous instalation.

= Known bugs and Limitations =
Well, most of it, I could write a novel.
Due to a hd crash I lost the stock maps I updated for improved aas/bot navigation so the stock maps the will play worse ie "get stuck" on geometry.
More info here: http://www.oakbots.co.uk/forums/viewtopic.php?t=100

= Performance =
As a rule you generally want performance over graphics in multiplayer games anyway, and throwing in CPU eating bots means you may want to consider dropping details down a bit.
i.e. High special effects and shadows off, dropping down resolution. Have a look for Quake 4 tweak guides on the net.
As well as experimenting with how many bots your system can comfortably handle.

= Using the Mod =
IMPORTANT: Make sure your Quake 4 installation has been updated to version 1.2.
Will not work on earlier versions of q4 and not guaranteed to work on later versions of q4.

1. Installation: Create a folder inside the Quake 4 folder called "sabot" and unzip the files into it.

2. Loading the mod:
Run the batch file "Load Sabot" in the sabot folder.
Or load quake 4 and choose sabot from the mods menu.
NOTE: You'll be able to tell if the mod has loaded successfully by typing:
gamename
At the console, it should say "SABot a10".

3. Adding a bot
Start a new multiplayer server
To add a bot bring down the console (via the CTRL-ALT-TILDE (~) keys) and type:
addbot bot_sabot
NOTE: addbot command works like the spawn command, eg accepts key/value pairs.
NOTE: Typing addbot bot_ will give you a list of bot defs.

4. Removing a bot
Use the console command:
removebot n
Where n is the clientnum of the bot. Bot clientnums start from 32 down.
or
removebot botname
Where botname is the name of the bot
or
removeallbots
To clear all bots.

= Bot difficulty =
Bots aim accuracy or "drunkenness factor" can be set when bot is added with the key/value "aim_accuracy", higher value = less accurate.
Range [0-4]

You can slow down bots aim a bit with key/value "aim_rate" default is 0.5 with less being slower. Range [0.1-1]

Example:
addbot bot_sabot aim_accuracy 3 aim_rate 0.4

= Teams =
The team of the bot can be specified with the team key/value. 0 = Marine, 1 = strogg Note: autobalance may override this.
You can force bot's to change team via the normal admin menu.

= Customising =
Bots can be customised as they are added (as seen above) or via def file.
The bots read all ui_* key/value like a player.
These include:
ui_name - For the name of the bot
ui_clan
ui_model
ui_hitscanTint

Examples:
addbot bot_sabot ui_name "Fluffy Bunny" ui_model "model_player_marine_tech"

Some of the above setting are in their own character def files, the can be added with:
addbot bot_sabot_tinman
addbot bot_sabot_blackstar
addbot bot_sabot_fluffy
Have a look at the file sabot/sabot-pak000.pk4 /def/bot_sabot_characters.def for the examples.
NOTE: The Quake 4 uses Zip archives with the extension .pk4 which may be opened in winzip. The .def files are plain text files.

= Playing custom maps =
Compiling AAS Files: The AI navigation system in Quake 4 relies on its own map of the level you are playing on. Chances are most multiplayer maps weren't created with this in mind but you can force the engine to compile them. They'll be rough, but will work for the most part.
You'll only have to do this once for each map that doesn't have them.

1. The aas compiler can currently only be run when the mod has been loaded fresh, while at the main menu and before you have started a server.

2. The console command to compile an aas file is:
runbotaas /mp/mapname
Where mapname is the file name of the custom map.
NOTE: This has changed from the previous version where it was runaas.

NOTE: You can use the key to complete what you started typing.
NOTE: Use the console command
dir maps/mp/
to list the filenames.

The quality of the aas file (i.e. incomplete areas for bot) will depend on how the map author has handled patches and models. See below.

= Map authors - Making your own map bot ready =
The aas compiler takes into account brush geometry but not patches or models (func_statics etc). You must block these out with a brush textured with common/monsterclip.
See the quake4 single player maps for examples.
And also the resource about clipping at quake4/iddevnet:
http://iddevnet.com/quake4/LevelEditor_Clipping
And also keep your eyes peeled on doom3world.org for info.

Things will be a lot better if you follow the standard quake 3 "playerclip everything you can" approach.
Also make sure the file aas.def in the sabot pak000.pk4 is loaded with your editor, this means either putting the file in base/def (which will cause problems for single player maps) or loading the editor with the sabot folder set as fs_game, i.e. quake4 +editor +set fs_game sabot
When running bsp/dmap runaas will automatically be run. You'll notice the only aas compiled is the aas32, the rest will be 630bytes empty and you can delete them.
In game use aas_showareas 2 and have a run around to get an idea of where the areas are, and note that they shouldn't pass through something that's solid to a player (do a test map with a crate made out out of a brush and one made out of a func_static to see what I mean).

= Running a pure server =
This is mainly for those who wish to run a server for other people over the internet.
I set pure mode to off in the autoexec.cfg because the aas compiler requires it and it's the easiest way to run custom maps with the aas files.
If you want to run a pure server:
1. change the autoexec.cfg
2. All extra data files that you have created that weren't in the sabot .zip - ie the aas files for the custom maps - must be put in a .pk4
3. People who wish to connect to your server must have the extra .pk4 files. How you distribute them is up to you, if it's just for friends you can just send the .pk4s.
If it's a public server you could set up autodownload.
http://www.iddevnet.com/quake4/AutoDownload

= Feedback =
Visit the SABot section in the OakBot forums:
http://www.oakbots.co.uk/forums/viewforum.php?f=7

= Distribution =
Distribute as you will, just keep the zip unmodified. Sweet.

= Thanks and credits to =
Super ZOMG thanks to Steve "cusTom3" Baker for putting up with my incessant rambling and his herculean efforts at deciphering the aas system and adding jumpad and teleporter reachabilities.
Thanks again to Richard "Son of Sam 2" Potter for his testing. SABot may be crap, but it's less crap because of him.
Cheers John Cricket for throwing up a SABot section off his OakBots forum.
Rick "GaussDecay" Idon'tknowyourlastname for the aim blending cooperatively thrashing around with the fake client framework and answering exactly "what's ccookin".

doom3world.org for providing an excellent d3engine modding community. It is excellent.
Raven for the fun continuation to both q2 an q3.

And you. Yeah you know.

Previous (but still valid) sabot thanks to:
Extreme thanks to id Software for making the Doom 3 engine easily modifiable for a retard like me.
Oh and thanks id for making the script plain text and thus hooking me into making this, and for the nice sdk code.
And for the brilliant AAS navigation system.
Brian from iddevnet for pointing out the runaas command and starting a solution for the usrcmds transmission.
Mega thanks to Steve "Cobalt" Gray for pointing out the (now blindingly obvious) fake client approach, and creating the not so obvious network wrapper.
Gate from Team Mirage for his initial grueling attempt to compile the linux build for a8.
AnthonyJ for the fix and the a8 linux build.

= Final Thoughts =
Alpha 8:
This may be the first and last version of SABot for q4 (though I've said that in the past for d3), with the new q4 bot community shaping up it doesn't make sense to continue it when the more seasoned lads will eclipse it so totally.
I knew things would heat up in the bot dev world for q4 and I'm real glad to see the collaborative effort that's building up at the OakBot site.
Plus I have wanted to have a bash other mod ideas for a fair while now, for good or worse. So, while I won't have a direct hand in further q4 bot developments, I will at least have a seditious whispering voice in it.

I had always intended to do a quick port of SABot from Doom 3, mainly to get something out for the community (no matter how crap). I had however been halfway through a goal/priority system overhaul so I had to complete and tweak it (which I haven't completed), then with the conversion over to q4 I decided to take advantage of the updated movement/enemy code, which took a while. After breaking the CTF code for the third time and finding problems with my old enemy selection code, I can now say with all the new code thrown in it's better and than the previous sabot. Kinda.
I'm also very glad that the mp performance is way better than d3 (especially the xp) which means a decent amount of bots can be added for a game of ctf.

With Raven having (quite understandable) shifted the scripts for weapons/actors and ai to game code and creating stae macros that kept the system very similar to what it was it would have been very easy for me to shift to full c++. Quoting myself: Having to extend, manage and debug a scripting system for something like ai can get tedious, going with full c++ and an ide, compiler and debugger that's had years of optimisiations and refinements is a big draw.
So why didn't I? As I mentioned I doubt SABot has any long term viability, I'm only just bumping into scripting limitations in this version. And the main reason - I started out learning programming with the d3 AI scripts and I like the idea of having something out there that the newbies can rip into and have a crack at something themselves. You don't allways have to create something striving for the best as long as you are having fun.

I'll shut up now.

Alpha 9:
Ah yes an update to q4 1.2 is all I currently have time for, it's a shame, I killed a couple of bugs but that's just exposed more in the stuff I had planned to overhaul. The whole thing is creaking at the seams. Bums.

Alpha 10:
It rises again from the grave to forever taunt me. Just a quick update to 1.3, but SABot had been previously shifted to the new fake-client framework which was a lot cleaner and stable. The ai code it still the horrible stuff that hasn't had any major overhaul since a7/doom3. But whatever, it works.

Download this file | Go to files list