

				    LAMEBOT

				       by

				    lamerPRO


Lamebot is advanced tool that will enhance your Quakeworld skills. It consists
of 5 parts: aimbot, speedbot, wallhack, radar and dodgebot. Aimbot will auto-aim
for you, speedbot allows you to run faster or hang in the air. Wallhack will
allow you to see other players through walls, radar displays positions of other
players on a 2D map in the upper left corner. Dodgebot analyzes paths of rockets
and moves you away if it finds rocket flying at you.

Lamebot is controlled with these variables.

aimbot_enable - value 1 enables aimbot. value 0 disables it.

aimbot_weapons - integer value from 0 to 255. Bit mask of weapons, that the
		aimbot will aim.
			1 - axe
			2 - shotgun
			4 - super shotgun
			8 - nailgun
			16 - super nailgun
			32 - grenade launcher
			64 - rocket launcher
			128 - thunderbolt
		For example aimbot_weapons 191 causes that the bot will aim all
		weapons except rocket launcher.

aimbot_panic - control aimbot auto-shot
		0 - shots only when you push shot button
		1 - shots automatically when it sees target within maxangle (see
			below)
		2 - shots automatically on any target and ignores maxangle
			(note: aimbot_panic 2 gives _VERY_ good results :-)
		3 - behaves as aimbot_panic 1 with shaft and aimbot_panic 2 with
			all other weapons
			(note: rapid turning around with aimbot_panic 2 with
			shaft can be seen very easily - use this setting if you
			want to hide the bot)
			(note 2: when there are spectators, they can very easily
			see both aimbot_panic 2 and aimbot_panic 3 modes - see
			aimbot_specator variable below)

aimbot_love, aimbot_hate - string variables. Lists of players that the bot will
		or won't shoot. It works this way:
			- when both lists are empty, the bot shoots all players
			- when aimbot_love string is nonempty and aimbot_hate is
			  empty, the bot shoots all players except players
			  specified in aimbot_love list
			- when aimbot_love is empty and aimbot_hate nonempty,
			  the bot shoots only players in aimbot_hate list
			- when both aimbot_love and aimbot_hate strings are
			  nonempty, the bot doesn't shoot players in aimbot_love
			  list, shoots all other players, and shoots players in
			  aimbot_hate list with higher preference
		These variables are comma-separated lists of players. Set them
		with commands like this
			aimbot_hate "lamer,looser,d?bill"
			aimbot_love "my_love"
		Clear them with aimbot_love "" or aimbot_hate "" command.

		How player names are matched against lists:
			An item in list can specify only part of a name.
			Compare is case-insensitive
			Colored characters with bit 7 set are converted to
				normal characters before compare.
			Colored numbers are converted to normal numbers before
				compare.
			'?' is a wildcard for any character (use when player has
				special characters in name).
		For example, the above example aimbot_hate "lamer,looser,d?bill"
		will match players "lamer", "LaMeR", "LamerPRO", "***lOOseR***",
		"debill", "d.bill".

		Because matching players is quite compicated task, list of
		players is refreshed only every 32 frames. When you change some
		of these variables, the changes take effect after 32 frames.
		Because of this, do not change values of these variables in
		shot script.

aimbot_team - when 1, the bot won't shot players in your own team. It works the
		same way as if you put list of your teammates into aimbot_love
		variable. Note that aimbot_team has precedence over aimbot_love
		and aimbot_hate - if aimbot_team is 1 and player is in your
		team, the bot will never shot him - no matter how aimbot_love
		and aimbot_hate is set.

aimbot_maxangle - the maximum angle the bot will turn when aimimg. The bot won't
		aim players out of this angle.

aimbot_maxangle_near, aimbot_near_threshold - when the enemy is near, you
		usually want to increase aim maxangle, becase it is much harder
		to aim at enemy by hand.
		- when the distance of enemy is less than aimbot_near_threshold,
		  the bot uses aimbot_maxangle_near instead of aimbot_maxangle
		  when deciding if it should aim of not.
		- when the distance of enemy is less than
		  2*aimbot_near_threshold, the bot uses (aimbot_maxangle_near +
		  aimbot_maxangle) / 2 when deciding if it should aim.

aimbot_spectator - turns some aimbot features off when there are spectators:
		0 - do not turn off any features when spectators are present
		1 - disable aimbot_panic 2 and aimbot_panic 3 modes (these can
			be very easily detected by spectators). If aimbot_panic
			2 or 3 is selected, it behaves like aimbot_panic 1.
		2 - disable all aimbot_panic modes
		3 - disable aimbot completely

aimbot_honest - when 1, aimbot won't shot players it can't see. For example when
		there's a player behind the corner and he runs out of the
		corner, the aimbot calculates from speed of rocket and speed of
		player an impact point and fires a rocket there. It will fire
		rocket when the player is invisible behind the corner. Setting
		aimbot_honest will prevent such behaviour - aimbot will target
		only visible players.

aimbot_zshift - z coordinate where the bot will aim. If the value is high, the
		bot will aim at head, if the value is low, the bot will aim at
		feet. If you set the value too high or too low, the bot will
		miss. This value is valid for all weapons except rocket
		launcher and grenade launcher. The bot can only aim grenade
		launcher left and right, it never aims it up and down.

aimbot_zshift_rocket - same as aimbot_zshift, but for rocket launcher, when
		aiming at players that stand on the ground. (in typical
		situations you want to aim at player's feet when they stay on
		the ground)

aimbot_zshift_rocket_fly - for aiming with rocket launcher at players that are
		not on the ground (in a jump or swimming in water).

aimbot_zshift_min, aimbot_zshift_max - when the bot cannot aim directly
		according to aimbot_zshift because a wall blocks shot
		trajectory, it will try other z coordinates in
		aimbot_zshift_min, aimbot_zshift_max range. This is useful when
		aiming at partialy visible players.

aimbot_shot_slowdown - slows down a player with a "speedbot" trick for one frame
		when shooting. Useful for more precise shoting when running.
		Some servers have speedbot protection and kick players using it
		- if you play at such server, you must set it higher.
		values:	-1 - turn it off
			0 - send one zero time frame. Some servers dislike it
			> 0 - time in milliseconds that the shooting frame
			  lasts. Smaller number means more precise shooting. If
			  you get kicked for speedbot cheating, try higher
			  values or disable it with -1.

new_predict - when 1, new prediction code is enabled always. When 0, new
		prediction is enabled only when aimbot_enable is 1. Original QW
		prediction code is designed for smooth movement of players, new
		prediction code is designed for maximum aimbot accuracy. With
		new prediction code, player movement is not smooth, players are
		jumping around when you have too big ping, but aimbot works much
		better - it can shaft down players even with ping 300. New
		prediction code is enabled automatically when you enable aimbot.
		This variable allows you to enable it even without aimbot. When
		you have too big ping, players will jump around with new
		prediction, when you have small ping, it could be good to enable
		it - for displaying more precise position of players.
		Variables aimbot_predict and aimbot_extrapredict control the
		behaviour of new prediction code - but don't modify them unless
		you know what you are doing. The prediction code auto-tunes
		itself and you can leave default values there.

aimbot_predict - how much of the ping the aimbot should predict. Default is 1000
		- predict exactly the ping time - which gives the best results.
		500 means predict half of the ping, 2000 twice of the ping etc.
		You can set it to lower value if the game consumes too much CPU.
		Note: this controls prediction of players no matter if aimbot is
		enabled or not - the same prediction routine is used both for
		displaying players and for aiming at players. The original
		routine in Quakeworld was modified for better aimbot
		performance.

aimbot_extrapredict - extra prediction time for aimbot in miliseconds. Default
		is 0. Note that aimbot calculates prediction time automatically
		based on ping and (if using rocket launcher) distance of player
		from you, so there's no need to set some value here. Use it only
		if you want to fine-tune prediction.

aimbot_predict_pixels, aimbot_predict_traceshift - these variables control
		motion prediction of players. Don't mess with them unles you
		know what you are doing.

break_players - this variable contains list of players. Matching against list is
		the same as in aimbot_love and aimbot_hate variables. When
		player with name that matches the list connects to the server,
		the client will immediatelly disconnect.
		You can put list of anti-aimbot or anti-camping extremists to
		this variable :-)

speedbot - allows to change your speed. Default value is 1 - normal speed. If
		you set it to 2, you will have double speed, etc. If you set it
		to 0, you won't be able to move. If you set it to 0 while you
		are in a flight, you will hang in air and you won't fall down.
		It is for example useful to do a rocket jump and set this value
		to 0 in the middle of the jump - you will hang in air at place
		where no one expects you.
		Some servers do not like speedbot and kick players that set this
		value to something different than 1.

wallhack - enables you to see other players through the walls. wallhack 0
		disables wallhack. wallhack 1 enables wallhack for all players.
		wallhack 2 enables wallhack for all players, weapons, armors and
		power-ups.

radar - displays positions of other players on a 2D map in upper left corner.
		Unlike wallhack, radar can display positions of players that are
		behing you too.

radar_rotate - when set to 1, radar will rotate when you turn. When 0, radar
		will be always in fixed position and arrow in the center will
		show your direction.

radar_size - size of radar on screen in pixels.

radar_scale - size of area that the radar will display. The higher value means
		that the radar will display more, but the resolution will be
		smaller.

fake_snapshot - quakeworld allows server admins to take remote screenshots of
		clients. When admin types "snap <player>" command on server
		console, the server will ask the client to do screenshot. The
		client does screenshot and sends it to the server. The server
		stores the screenshot to a file.
		If this variable is set to 1 and you are using wallhack or radar
		and server requests a screenshot, the client will disable
		wallhack and radar, create special screenshot, send that
		screenshot to the server and reenable wallhack and radar again.

dodgebot_enable - enable dodgebot. Dodgebot will analyze paths of rockets and
		will move you to minimize your damage. Of course - it works only
		with good ping, the person shooting at you must be far enough
		and there must be place to escape.
		Predicting player move in all directions and analyzing damage
		consumes quite a lot of CPU - if you have machine worse than
		Pentium 200, it would be maybe better to turn dodgebot off.
		Dodgebot consumes extra CPU only when it finds that you are in
		danger.

dodgebot_jump - when set to 1, dodgebot will sometimes jump. When set to 0,
		dodgebot won't jump. When jump is enabled, dodgebot will consume
		twice CPU power.

dodgebot_time - how many milliseconds the bot should predict when it is trying
		to determine if you are in danger. Decreasing it will save CPU,
		but not too much. dodgebot_time_threshold sucks CPU much more.

dodgebot_speed - combine speedbot and dodgebot. When you are in danger, dodgebot
		will multiply your speed by this factor. Some servers do not
		like speedbots and kick players using them.

dodgebot_time_threshold - how many milliseconds the bot should predict when you
		are in danger and the bot is calculating in which direction to
		move. Smaller value gives worse results but saves CPU power.

dodgebot_frame, dodgebot_steps, dodgebot_extrasteps, dodgebot_xsize,
dodgebot_zdownsize, dodgebot_zupsize, dodgebot_near_threshold - internal
		variables. Do not change unless you know what you are doing. If
		you change them the bot will probably not work.

The following commands were added:

toggle <variable> - changes value of variable from 0 to 1 and vice versa

ping <host> - checks if host is running qw client

print <host> <text> - sends private message to host running qw client
		Note: The message is unreliable. It may be lost if the network
		loses packet. Send the message several times.

Sample config:

This is my lamebot.cfg file:
	alias +spbot "speedbot 2"
	alias -spbot "speedbot 1"
	bind m +spbot
	bind v "speedbot 0"
	bind n "toggle aimbot_enable;aimbot_enable"
Holding down 'm' will double my speed. 'v' will cause hang in the air ('m'
releases it back). 'n' will toggle aim-bot and display current value.

Recomended settings:

for maximum performance, no matter if people will see the bot:
	aimbot_enable 1
	aimbot_panic 2
	aimbot_spectator 0
	aimbot_honest 0

when you want to make the bot less noticable:
	aimbot_enable 1
	aimbot_panic 3
	aimbot_spectator 1
	aimbot_honest 1
	aimbot_maxangle 15

when you want to absolutely hide the bot:
	aimbot_enable 1
	aimbot_panic 1
	aimbot_spectator 3
	aimbot_honest 1
	aimbot_maxangle 15

Detecting the bot:

If you want to make sure if someone is using Lamebot, type chat message
"lamerPRO is cool dude!". All players that are using Lamebot and have it enabled
will respond with "I am a big LAMER" message and list of enabled features. The
feature is listed if it was enabled in last 5 minutes. After 5 minutes of having
not any Lamebot features enabled, the bot will not respond.

Note: this detection works only if there was not any chat or name change in last
few seconds.

Known bugs:

Bot traces shots throuht static parts of map but doesn't consider dynamic part
(like doors, lifts etc.). When there are dynamic parts, the bot can shot into
them. This usually happens: when you are on moving bridge in DM2, at red armor
in secret place in DM2, before door in E1M2. Turn the bot off in these areas.

Dodgebot consumes a lot of CPU power. Turn it off or disable jumping or set
smaller dodgebot_time_threshold. Always turn dodgebot off if you have too big
ping (200) - dodgebot is useless in such cases and you save the CPU.

Game consumes a lot of CPU when you have too big ping and you see a lot of
players. Set aimbot_predict to lower value to save CPU (but aimbot won't be so
precise if you do it).

Wallhack and radar don't display all players - it's not bug, it a feature.
Wallhack and radar display only players that the server sent you info about.
The server sends info only about players that are near you. Because you can't
patch the server, you can't get info about all players.

Players are jumping around when you have high ping - that's because prediction
code was modified and optimized for maximum accuracy, not for smoothness (like
original QW code). With the original QW prediction code, the bot sucked at
higher pings. Now - players are jumping around but it aims much better.

Release history:

0.70 - first release

0.71 - fixed bug in aimbot_love and aimbot_hate mathching of colored numbers

0.72 - new variables:
	aimbot_spectator
	aimbot_honest
	break_players
	aimbot_team
	aimbot_panic mode 3
	new_predict
     - new commands:
	ping
	print
     - fixed bug in rocket prediction - now it is much better and it can hit
       players in the air :-)
     - modified qw prediction code - now it works much better with high ping;
       with ping 200 it can shaft down horizontally running player
     - do not aim with shaft at too distant players
     - do not flood console with messages when some mod changes weapon model
     - fixed another stupid bug: due to byte wrap-around in qw prediction
       routine, the bot sucked as hell at ping > 255


