Title    : Swimming Bot (Swimbot)
Filename : swbot103.zip
Version  : 1.03 (for Quake 1.01)
Date     : 96/9/29
Author   : baloo the bear (Greg Fukui aka julias_child)
Email    : baloo@kaiwan.com
Credits  : Micheal Polucha (co-designer of Original TM bot)
           Tim Polucha (co-designer of Original TM bot)
           Nathaniel Gorham (Original DM bot)
           Punisher (BG bot...starting point for this work)
           Stan Smith (for IDGlobe bubble idea)
           Steve Bond (the thankfully modular Ejecting shells)
           Carson Sutton (Roambot...basis for swimbot)
           ...anyone else whose work is part of Roambot
           Jim Lowell (Basin.bsp was used extensively for test)
           Dennis Noordsij (Multiskin is cooool!)
           Perecli Manole (the thankfully modular Holoquake)
           Id Software (esp. Mikeab, who answers my emails!)

Type of Mod
-----------
Quake C  : yes
Sound    : yes (ejecting shotgun shells)
MDL      : yes (multiskin11, ejecting shells)

Format of QuakeC
----------------
unified diff  : no
context diff  : no
.qc files     : yes
progs.dat     : yes

Description of the Modification
-------------------------------
Changes since version 1.02:  Improved single player bot
by adding toggle impulse, and making bot hover around area
in front of player instead of around player.

Changes since version 1.01:  Extensive changes to all bot
AI code to improve cooperation between search, roam, and
attack modes.  Bots find teleporters faster.  Bots fight
underwater with less drowning.  Added AI for four 2-bot
teams (when impulse 100'ed twice), bots help bots with the
same netname, being especially hostile towards enemies of
the twin.  A bot will even seek vengeance against the twin's
killer.  Fixed broken single player teamplay (oops again).

Changes since version 1.0:  Revised botai.qc and bot_roam.qc
to fix broken roaming (oops).  Also improved realism of bot
swimming.  I hope anyone who tried revision 1.0 will still
give this revision 1.01 a chance.

This is a modification of Roambot, with bots that should:
a) try to jump if stuck in place (on ledges, etc.)
b) swim to the surface if underwater
c) try to dodge while attacking
d) break off attack if out of ammo or near-death

Also incorporates Multiskin, and Holo, because I used them
to skin the bots (but Holo does not yet fool the bots).

Impulse 100 creates a single (non-deathmatch), or four
(deathmatch) bot(s). There is no way provided to get rid
of the deathmatch bots except by filling them with holes.
The single player bot may be removed by a second impulse
100.  The Holo is assigned to impulse 50, but since it
doesn't yet fool bots, I didn't mention it before...

How to Install the Modification
-------------------------------
Yawn, another bot...  Guess you know how to do this by now...

Make a new dir in your quake directory (ie: c:\quake\swimbot).
Use the directory option to unzip, or:

Put progs.dat in the new dir;
Create the progs, and sound\weapons subdirectories;
Move *.mdl into new dir 'c:\quake\swimbot\progs\';
Move *.wav into new dir 'c:\quake\swimbot\sound\weapons\';
Bind a key to impulse 100 to activate the bot;
Run quake, with your normal parameters plus:
<...> quake <...> -game swimbot <+map ...>

For the single player mode, I enter "teamplay 1<cr>" at the
console.  I have a report from combo@horizon.nl that the
bot may not recognize the "teamplay" mode set by the menu?
I have not tested the bot in cooperative mode yet, since I
am still conceptualizing how coop will work with the four-
team deathmatch bots (which I want be able to disable in
the future).

This is the last version which will include the player and
shellcase.mdl and shellhit.wav files, since I assume that
anyone trying swimbot either already has them from a prior
version, or has them as part of another mod.  Those files
double the size of swimbot.zip.  The next version of this
readme has to be smaller too!

Quakec hackers can unzip the source to the progs dir...
I wish I could say that my changes are clearly marked, but
unfortunately, no.  I only modified about 6 of the files
anyway.

Technical Details
-----------------
I liked the independent spirit of Carson Sutton's Roaming
bot and just tried to make it a little better at handling
non-combat situations (wandering into corners and getting
stuck).

I ended up using traceline to allow a bot to identify
if underwater or not.  The reason is that the entity
flag, self.waterlevel, does not behave the same for monsters
and bots, as for the player.  The player gets values
0=out, 1=feet, 2=waist, and 3=head, but my bot could only
get 0,-1=out, 1=inwater.  Apparently, monsters don't care
about water except to splash around in it (and the watermon
quakec patch didn't help at all).  To make matters worse,
bots move in steps, so "swimming" means jumping, with the
end result being that the bots don't swim realistically.
Hey!  At least they'll drown/short-circuit if underwater
too long, which is only fair, since the bots start blasting
the player as soon as spawned.

I had to lower the amount of display time for the shotgun
shell cases, because of packet overflows (all those
backpacks, shells, and the bot leaders only allowed me
to use four measly bots).  Also, drowning bots will not
spawn bubbles.  I also lowered the frequency of idle
noises (I already hear those blasted noises even when not
playing the game!).  There was a typo in items.qc that
caused backpacks to telefrag the bots, and also, I think,
caused unkillable ghost bots to run around.  Its fixed
(I think, X).  Report any bugs you find.

Planned improvements:  Elimbot seems to be pretty neat,
but it only works with maps for which it has waypoints.
I want to try to make swimbot learn and remember its
own waypoints.  (Hmmm, traces of Dungeon Keeper?).
I don't know if this is possible, though, because the
progs.dat keeps growing and growing, and swimbot still
wont push buttons...

Author Information
------------------
This is my first effort, but I've also got some ideas
for a level.  Unemployed, so got plenty of time...

Copyright and Distribution Permissions
--------------------------------------
Swimbot mods copyright (c) 1996 Greg Fukui.

You may distribute this Quake modification in any electronic
format, with the following restrictions:

This description file must remain intact and unmodified,
and must be retained with the rest of the files in this
archive.

The original Quake source code is the property of Id Software
and may not be resold as part of any collection, without
the permission of the authors.

Other authors MAY use these modifications as a basis for other
work providing they credit me if reusing or modifying any of my
original code.

Swimbot may not be used, or referenced in any Quake versus
Duke3D "discussions" <g>.

Availability
------------
This modification will be available first from Walnut Creek,
ftp.cdrom.com.
