THE X-MOD uses parts of the eraser bot source and eraser root files for
bots.
Bots will need a <MAPNAME>.rtz file in the routes directory to play well.
If such a files does not exist, it will be created with node data collected
while playing.

If there is interest I can add a xmod-routes.zip with eraser route files for
some popular maps. (q2dmX, q2ctfX, ?)
Drop me a line: e-x-p@gmx.net

Here is some text from the original Eraser code by Ryan Feltrin:
>>BEGIN
FREQUENTLY ASKED QUESTIONS

   Q: What sort of actions do I need to teach them most efectively ?

		Just make sure you run around, and collect things. If you
		camp the whole game, they won't learn much at all. You only
		have to do this once, then the data is saved, so the next
		time you play the map, you won't have to worry about the learning
		at all, since it will be switched off.

   Q: Will the learning be establised from both human players or just 
      the serverside player ?

		All human players in the game create node data, when dynamic table
		generation is enabled.

   Q: The game starts, but I don't see any bots?

      To spawn some bots, type "bot_num <n>", where <n> is
      a number from 1 to 24. They will then enter game at 1 second
      intervals (to try and reduce telefrags).

	  eg. bot_num 4

      You can also spawn a specific bot using "bot_name <name>",
      where <name> is the bot's name. You can get the list of bots
      from bots.cfg, which you'll find in your Eraser directory.

	  eg. bot_name cipher


   Q: I'm trying to setup an Eraser CTF server, but everytime a client connects
      they can't join the game?

		That's because the client doesn't have the CTF files installed in
		Quake2\Eraser, since that's the directory the server is running. So
		you need to do ONE of the following:

		1) rename your CTF dir to CTF_back, then rename the Eraser dir to 
		   CTF. Then start the game with quake2 +set game ctf ...

				*** OR ***

		2) Tell the clients to make an Eraser dir under Quake2, and copy
		   the pak0.pak file from their CTF dir to the Eraser dir.


   Q: The bots sometimes stand around looking bored?

      There are still some glitches in the bot decision-making that can result
      in bots getting stuck. Usually a rocket up their ass helps get them down :)


MAKING CLEAN ROUTES

   Here are a few tips to keep in mind when creating routes for new maps:

		Walk up stairs first, where possible. Otherwise a series of jump/landing
		nodes will be dropped as you go down, which uses up excess nodes, and
		is less accurate than walking nodes.

		If you jump off a ledge, try and make a path back to the jumping position 
		as soon as possible. This will prevent all other nodes from having to
		recalculate best routes later on, after the return path is made.

		The same applies for teleporters and platforms, try and get back to 
		the starting position ASAP.

		Turn on bot_debug_nodes, then enable the scoreboard. If you see "optimizing
		route xxx -> yyy" showing a whole range of numbers, then it's best to stop
		here for a bit to let it catch up. You will see this come up fairly often
		while building a new map, so not to say you should always stop when it's
		optimizing, just that if you complete a link back to a jumping locaiton
		(for example) it will need to recalculate a whole bunch of new routes.
		Stopping after the link is made for a minute or so, will prevent new routes
		from having to be calculated over and over, as surrounding nodes find better
		routes.

		Also, try to walk a nice line, rather than dodging around picking up items
		all over the place. The straighter the line you walk, the more realistic the
		bot's will move. Keep in mind that the bots will automatically pick up items
		along the way, if they are available, so you don't have to leave a trail that
		picks up items, just make sure you walk within the vacinity of all items.

		When loading a map, dynamic node placement will be disabled, IF AND ONLY IF,
		all items in the level have a node nearby, OR the total number of nodes
		exceeds 512 (the absolute limit is 750 I believe).

		Only jump when necessary.

		Type "cmd showpath" to enable the green line debugger. Just hit fire to
		set it's position to where you're standing, then move around and watch
		the path change. If it disapear's, i means the path is severed, and needs
		to be traversed to fix it up.

		If you turn on bot_debug_nodes, then restart the level, you will notice
		a list of items listed upon loading the map, unless the map is fully
		pathed. Those items listed are not currently reachable by a bot, and they
		will glow RED in the game. It would be wise to make sure bot_calc_nodes is
		ENABLED and then go around collecting all glowing items.

		Use the "bot_optimize" command to speed up the optimization process. This
		will slow down the frame rate depending on how large you set this to, but
		will often speed up the process by 10x or more.

		Try not to die.

	Alternate Paths in CTF

		It is possible to create alternate paths for bots, when returning the flag
		in CTF mode. NOTE: this only work in CTF, and is only used when a bot has the
		flag.

		To do this:
		
		1. bind a key to "flagpath", eg, 'bind q "flagpath"'.

		2. go to the enemy base, and capture the flag.

		3. press the flagpath key on the way back to base to drop a SOURCE flagpath. This
			should be dropped in a position that will always be touched by a bot on it's way back
			to base. So either use a position really close the flag (but not touching) or
			in a doorway that is close to the flag, that is the only way out of the base.

		4. determine 2 paths that can be taken from this position, dropping a destination
			node along each of these 2 routes, far enough away from the SOURCE node, to force
			the bot to take an alternate route to the shortest path.

		5. repeat steps 3 and 4 to create more "branching" flagpaths as required.
			For example, at the end of one of the paths, there may be another choice between 2 paths.
			You could create another flagpath branch, by dropping a SOURCE node near the end of the flagpath
			you just dropped, and then dropping the 2 destination nodes in positions that would
			force the bot to take alternate routes.

		6. change to the other team (if you were on the red team, type "team blue").

		7. repeat steps 3-5 as required.


		Upon touching a SOURCE node while carrying the flag, a bot will then choose a random destination
		flagpath that belongs to this SOURCE flagpath. It will then proceed to that position until
		it touches the marker. Once it has done that, it will resume heading back to base. So if you
		place the destinations too close together, it might take the same route after touching either
		destination. It's best to place the destinations as far away from the SOURCE flagpath as possible.		

		For a running demo of flagpaths being constructed, download the following file, and place it into the
		quake2\eraser\demos directory. Then while running the Eraser mod, type: "demomap flagpath.dm2".

		Get the demo at: http://impact.frag.com/files/flagpath_demo.zip


CONSOL VARIABLES

   The Eraser provides a range of customization commands and settings,
   which enable you to populate your server with Bots, when not
   many humans are playing. This means people are more likely
   to come to your server, since there is more chance of finding
   opponents (human or not).

   The following commands are available:

   bot_num <n>

      defines the maximum number of bots

   bot_name <name>

      spawns a specific bot

   bot_auto_skill 0/1					(default = 0)

      disable/enable automatic skill adjustment. When enabled, bot's skill
	  levels will be increased when they are killed (by a human player),
	  and decreased when they kill another human player.

   bot_chat 0/1

      disable/enable bot chatting.

   lag <n>			(CLIENT ONLY)

      adds some latency to your controls. <n> should be a number between
	  0 and 1000. This in effect, adds to your ping time.

	  eg. "cmd lag 500" gives 500ms latency

   view_weapons 0/1										*** new to v0.8 ***

      disable/enable view weapons patch. Just copy the pak2.pak from
	  your view weapons patch directory, to the Eraser directory, then
	  enable view_weapons. This enables you to see which weapons the
	  other bots/players are using.

   bot_drop <name>

      disconnects a the given bot from the game. If you have set bot_num,
	  then you can expect the program to automatically add a new bot in the
	  game. So make sure you set "bot_num 0" before using this command, if
	  you don't want another random bot to join the game.

   teamplay 0/1

      disables/enables teamplay (see TEAMPLAY section above)

   sv teams <team1> <team2> ...

      spawns one or more teams at once, by name.

   sv bots <bot1> <bot2> ...

      spawns one or more bots at once, by name.

   bot_tarzan 0/1						(default = 0)

      disable/enable so called "advanced" use of the grapple hook.

   mapmod_random 0/1					(default = 0)

      disable/enable random map progression when using maps.txt. When
	  enabled, instead of sequentially traversing the maps, a random
	  map will be selected from the list on each level change.

   botpause

      pauses the game. this is included, since the normal pause button
      doesn't work during deathmatch play.

   bot_allow_client_commands 0/1		(default = 0)

      disable/enable client-side bot spawning via "cmd bots <n>"

   bot_free_clients <n>					(default = 0)

      specifies the number of client positions to keep vacant
      at all times, whilst there are bots playing. So if
      you have set "maxclients 32", and there are 20 bots
      playing, set this value to 3, so that if the total
      number of clients (players + bots) exceeds 29, a bot will
      be kicked from the game.

      The lowest scoring bot is kicked first, in this circumstance.

      As soon as more than 3 slots become vacant, a new bot will
      be automatically brought into the game, assuming the current
      number of bots is less than the current value of bot_num.

   bot_show_connect_info 0/1

      Disables/Enables the banner that's shown to clients upon
      connecting, indicating that the server is running the
      Eraser bot patch.

   bot_calc_nodes 0/1

      Disables/Enables dynamic node calculation. If you are
      sure that this map has been played enough times, that
      it is unnecessary for the bot to continue learning the
      environment from the humans, just set this to 0. This
      frees up some CPU time, which should make things run
      a bit smoother if lots of humans are playing.


<< END


BYe!
EXP
