JoeBot by @$3.1415rin
-- This Bot is based on botman's HPB_bot - template code - --
README FOR @$3.1415rin's JoeBOT 1.6.5 -

Check out JoeBOT on Sourceforge if you have something to contribute to this project !

0. Information about this bot for cs

The main movements of this bot are controlled by 2 artificial neural nets (nn.br3 and nnc.br3). The wayfinding stuff if done on the basis of waypoints and some sort of backtracking combined with the floyd/warshall algorithm.

( Note : Additional map loading times of about 1 minute are normal on the first start of a map, there is no reason to complain about it. In that time JoeBOT creates navigation tables, which are stored afterwards on your harddisk, so the next time the map will load faster, the bot just has to load the files. On normal CS maps you won't normally notice this additional delay, but on big maps like in DOD or maps with high density waypoints, you might notice it. )

- human-like reaction time + aiming
- human-like accuracy ( changeable )
- some little pieces of teamwork ... to be extended next time
- bots sometimes camp
- defusing/planting bomb, rescuing hostages and other little things ... es and as maps are not supprted yet !
- all weapons are supported
- weapon pickup system
- personality system, i.e. favourite weapon, agressive/defensive, chat mode
- bots follow some radio commands and are using the radio themselves
- bots don't attack teammates

1. Installing ...
First deinstall your current bot, if u'd one.
Then exec your .exe file and follow the instructions ...

Or, if u've got a *.zip file, this normally contains the folder structure. So just extract the zip file to your halflife folder ( or counter-strike folder for the retail version ), _not_ the cstrike folder. Or you better extract it to another folder if you are unsure and then you can copy it manually to the halflife folder. you will need to copy the cstrike and the joebot folder from your extraction folder. When you are asked if you wanna replace your cstrike folder, click on 'yes'. it won't delete the old folder, but the new files will be added there. .. and dont be confused because there is a jeobot folder in the halfllife folder and one inside the halflife/cstrike folder. this is ok :)

*old stuff *: copy the *.br3 to your CStrike/joebot dir, the *.wpj to cstrike/joebot/wpjs/std/, the chat files ( texts.txt e.g. ) to cstrike/joebot/chat/ and the joebot.dll to half-life/joebot/. Then modify the dll entry in cstrike/liblist.gam to "../joebot/joebot.dll" as shown in 'my liblist.gam' after having made a backup of this file for deinstalling.(if the zip file contains directory information just unzip it and copy the cstrike dir into ur hl dir and overwrite everything)

Now you just have to run cstrike as a server for a lan game.

2. Adding Bots

Type addbot in your console
The number of automatically added bots can be changed in cstrike/bot.cfg. max_bots/min_bots is a variable, which defines the min or maximum number of bots on one server. If this isn't the case, the server adds new bots. Of course u can just use the addbot command in the bot.cfg as well.

addbot syntax :

addbot team model name skill
(addbot [1/2/5] [1/2/3/4] name )

example : addbot 2 2 @$3.1415rin

write 'default' for the parameter u don't want to specify

3. Commands

Dedicated server commands :
 Usage (v1.6.5 or higher) : "joebot command parameter1 parameter2 ...
 Usage (previous versions) : "joebot command|parameter1|parameter2|...

The 2nd to 4th column specify where a command can be used. CON means the in game console on a listenserver, DED the console of a dedicated server and CFG a bot config file like cstrike/joebot/bot.cfg.

Waypoint commands
language e/de/fr + - + sets bot menu language to Englsih, German or French
waypoint on/off + - - toggles visibility of waypoints
waypoint sound on/off + - - toggles sound messages related to waypointing
waypoint delall + - - deletes all waypoints
waypoint add + - - adds a waypoint
waypoint delete + - - deletes a waypoint
waypoint aim + - - toggles the aiming flag of the nearest wp within 100 Units - used for camping bots to look @
waypoint sniper + - - toggles the sniper flag of the nearest wp within 100 Units
waypoint bomb + - - toggles the goal flag of the nearest wp within 100 Units (de) // bomb target
waypoint blockhostage/bh + - - toggles the blockhostage flag of the nearest wp within 100 Units. The function of this wp is to prevent bots from running there with hostages
waypoint hostage + - - toggles the goal flag of the nearest wp within 100 Units (cs) // hostages
waypoint viprescue + - - toggles the goal flag of the nearest wp within 100 Units (cs) // vip rescue zone
waypoint rescue + - - toggles the rescue flag of the nearest wp within 100 Units (cs) // rescue zone
waypoint ladder + - - toggles the ladder flag of the nearest wp within 100 Units
waypoint jump + - - toggles the jump flag of the nearest wp within 100 Units
waypoint reset + - - forces a bot which is near to that wp to reset his setting of the next wp. This is useful if the probability is high, that a bot can fall down from somewhere
waypoint visit + - - toggles the visit flag of the nearest wp within 100 Units // this wp should be visited once in a while
waypoint dontavoidfall/daf + - - toggles the dontavoidfall flag of the nearest wp within 100 Units // this flag is for supressing the bots anti fall system for a short time
waypoint dontavoid/da + - - toggles the dontavoid flag of the nearest wp within 100 Units - at this wp the bot does not avoid walls, etc. (see waypoint.html)
waypoint counter/ct + - - wp only for counters
waypoint terror/te + - - wp only for terrors
waypoint noteam + - - not team specific wp
waypoint addstdwp + - - adding standard wp's like starting points
waypoint test + - - counts the number of waypoint types and gives u hints, when there's for example a wp for the rescue zone missing
waypoint makepaths + - - /*This command is temporary not available ! Instead it'll save and load the waypoints to ur hd and will recreate the routes this way. Note that ur saved waypoint files are affected*/ Calculates paths. U should do this every time u have edited the wps. U'll have the same effect be saving and loading the wps, but makepaths does not affect your saved files (good for testing)
waypoint load + - - ...
waypoint save [dir] + - - with the dir param u can define the directory in which the waypoint file will be stored. U don't need to specify a dir.
waypoint forcenostat [on/off] + - - Forces the bot not to recalculate the statistics tables and visibility tables on waypoint editing. This saves some CPU power on waypoint editing.
waypoint forcestatrecalc + - - Forces the bot to recalc statistics and visibility tables
autowaypoint on/off + - - waypoints will be added where player run
autowaypoint all/human + - - Shall all players or just humans create waypoints ?
autowaypoint testjump on/off + - - Should the jump wp added by autowaypointing be tested by an addtional routine if they are required ?
autowaypointaddjump/awpaj on/off + - + should a jump waypoint be added where the autowaypointer jumps ? default is on
advancedmovements/advm on/off + - - Should the advanced movement system be used while autowaypointing ?
pathwaypoint/pw create1 + - - starts a path from one wp to another
pathwaypoint create2 + - - determines the end of the path started with create1
pathwaypoint remove1 + - - ...
pathwaypoint remove2 + - - ...
debuggoal x + - - forces all bots to go to one waypoint. x is the number of this waypoint. you can get the number of a waypoint with "waypoint info"
Other Options :
prefix 'agg' 'nor' 'def' - - + Setting prefixes for bot names ( the [JOE] at the beginning ) for differently agressive bots
min_bots - + + Setting min number of bots
max_bots - + + Setting max number of bots to be added automatically ( fill server up to this number )
fillserver [all/te/ct/0/1] [full/half] + + + Filling server with bots
mix_names on/off - + + names from bot_names.txt are random or not
leetposs + - + possibility for bots "speaking" 1337 ... in %
botuseradio on/off + - + should bots use the radio ?
botspray on/off + - + should bots use the spraypaints defined in spray.txt ?
resetstat + - - resets statistics
extjoe on/off + + + should names be extended by [JOE] ?
extskill on/off + + + should names be extended by the skill ?
botshoot on/off + - + If u r 2 bad !!!!
kickbots ct/te/all + - - ....
kickbot ct/te + - - ....
bottkpunish on/off + - - sets flag for bots killing their teamkiller from the previous round. The default isoff, because many ppl thought this feature was a bug.
endround + + + kills all bots to make the round end
edown on/off + - switches enemy down mess off/on
botchat on/off/sec + - + switches bot chat on/off, or set the average pause between chatting messages in seconds
bot_ichat [off/dead/alive/all] + + + When should the interactive chat mode be used ?
nnstat + - - shows status of nns - to be extended in some time ...
nn_update + - - default : nn_update 10 ... 10 updates of nn per sec
campposs value + - - sets the overall probability of camping. The default value is 2, 100 would be almost no camping, 0 camping whenever useful
pistolonly [on/off] + - - bot only use pistols
loadbuyprob / lbp [filename] + + + Loads the probabilities for buying a weapon from a file. The file will be loaded when the next bot wants to buy sth.
joinwhuman_max / jwhm [on/off] + + + Should bots join the game due to the max_bots variable if there isn't already a human player on the server ?
joinwhuman_res / jwhr [on/off] + + + Should bots join the game due to respawning after map change or fillserver command if there isn't already a human player on the server ?
randomwpload / rwpl + + + Load waypoints without using the order of waypoint folders stated in cstrike/joebot/wpjs/dir.txt. The loaded data from dir.txt will be changed in memory, but the file remains as it is.
trainnn + - - with this command you can train the pattern u defined in nnpattern.pta. please add a bot before excuting this command to make sure the nn has been loaded correctly. The process itself can take a while. On a iCel466 it can take up to 1 minute.
savenn + - - save the trained nn
Bot Skill and Aiming options :
botskill_min - - + Setting range for skill of bots to be added ( if not specified when added )
botskill_max - - + Setting range for skill of bots to be added ( if not specified when added )
botmom [all/default/getdefault/get/'name'] [Value] + - - setting bot's momentum for aiming .. default is 70
botvs [all/default/getdefault/get/'name'] [Value] + - - setting bot's speed for aiming .. default is 100
botskill [all/default/getdefault/get/'name'] [Value] + - - setting bot's skill for combat .. default is 90 ... this has till now only a little effect on avoiding recoil and reaction time

4. files and their importance
4.1. bot_names.txt
Here you can create a list of names for the bots. The personality stuff is no longer handled in this file, instead there are some files in joebot/per/ to define this.

4.2. texts.txt
The file cstrike/jeobot/texts.txt contains the chat sentences of the bots. Every category is divided into sentences for

and the team specific messages with resp.



-- [bombplanted]
-- [hostdown]
-- [kill]
-- [dead]
-- [teamattack]
-- [reply]

About the [reply] category :

In this category you can specify keywords on which the bots can react with the following phrases. The chat file then looks like this :

@KEY "keyword1","keyword2"

4.3 bot.cfg
Here u can add commands which should be executed while starting the game.

4.4 bot_skill.cfg

Example :

VSC 10
VSM 70
REA 1.0
DIS 500
TPD 1000
PDI 250
PTD 3000

this is data for skill 0. U can add as many skill settings as u want, but please sort them from 0-100.

Of course you can use bots with skills in between. For those bots, the definitions from bot_skill.txt are interpolated.

  • # VSC : Speed of changing the direction
  • # VSM : Momentum for changing direction
  • # REA : Reaction time
  • # STH : values over 90 mean they don't have to estimate ur position, but the know the exact position
  • # DIS : distance to overlook instantly // at bots with sniper weapons this is 2 times
  • # TPD : milliseconds it takes to look further 1000 units
  • # PDI : distance to overlook instantly // at bots with sniper weapons this is 2 times (prone)
  • # PTD : milliseconds it takes to look further 1000 units (prone)
  • # REC : Amount of recoil when the bot should stop shooting for some short time ( amount is tan(RecoilAngle) * fEnemyDistance )

-------:::::: SUPPORTED MAPS ::::::--------

( just look for the wpjs you have somewhere in ur cstrike/joebot/wpjs/.../ directories )

(note that u can set another priority for the waypoint directories in /joebot/wpjs/dir.txt to play other wpj if there are more than one version of one waypoint file)

5. trainnn : The neural net is a 6-5-5-5 bprop feedforward net. (for nntrain.pta)

Inputs are :
	IHealth,			// health of bot ( -1 is 0%; 1 is 100% )
	IDistance,			// distance to en ( -1 is near, 1 is far )
	IEWeapon,			// weapon of enemy ( low range like pistol is -1, long range like awp is 1)
	IWeapon,			// weapon of bot
	IAmmo,				// amount of ammo in used clip ( -1 is 0%, 1 is 100% )
	ISituation,			// situation, i.e. how many enemies are fighting against how 
					many allies ? ( bad is -1; good is 1 )

Outputs are :
	ODuck,				// Duck (1 is duck, 0/-1 is not duck)
	OJump,				// Jump (1 is jump, 0/-1 is not jump)
	OHide,				// should hide ? (1 is hide, 0/-1 is not hide)
	OMoveType,			// Run - Walk (none = -1;walk = 0;run = 1) 
	OStrafe,			// strafe left - right (-1 left, 0 nothing, 1 right)
if u think u've a well done training pattern set, please send them to me. For this, attach nntrain.ptt in the same dir as nntrain.pta to ur email.

6. Thx to ...

botman thx for HPB template code and forum
[eli]rabehelp to get access to the server @ school to do some time expensive computations on SOMs
count floyd for his decal list :D and always interesting discussions in case we're online the same time
and for parts of his chat files :-)
killarunafor some advice on the aiming system
devil from for translating main parts of the bot menu to french
....... a lot of nice ppl from different bot forums .......
  JoeBot is (C) Johannes Lampel - Website (C) by Stefan Hendriks; logo/button/title picture made by Johannes Lampel