====================
Title    : CronosBot
====================

Filename : CRONOBOT.ZIP
Version  : 1.06
Rel Date : 1/10/99
Author   : Cronos
Email    : Cronos@clovenhoof.freeserve.co.uk
WebPage  : http://www.planetquake.com/cronos/

Credits  : BGBOT, TutorBot and ZeusBot for ideas.
	   Coffee for his tutorials although CronosBot is far removed from them :)
	   BotEmporium for their web site.
	   Alan Kivlin re Rankings for bots, but I'm sure every bot coder knows about Alans
		work on rankings.
	   David 'crt' Wright for the Rocket Arena source from which I ripped a
		few of the routines to stick into the CronosBot.

============
Type of Mod
============

Quake C  : yes
Sound    : no
MDL      : no


==================
Format of Quake C
==================

unified diff  : no 
context diff  : no 
.qc files     : no
progs.dat     : yes


================================================================
Description of the Modification (well, more of a history really)
================================================================
summary:
--------
A bot for normal deathmatch Quake.
Knows Rocket Arena rules too.

version 1.06:
-------------
This release sees a lot of changes to the movement code of the bots once again, although this mainly affects fixed waypoint levels. Navigation is now divided into fixed waypoint levels with pre-pathed joins, fixed waypoint levels dynamically joined (currently none) and dynamic waypoint levels. What this all means is that the bots can play any level but on a pre-programmed level they move around more optimally. In fact their play is really very good for some nice one on one action. Even for better players the harder skills should provide a reasonable opponent certainly on a par with any of the better known bots. I have also spent some time improving bot movement on dynamic waypoint levels. Teleports and lifts have now been built into fixed waypoint levels properly although in a dynamic level they are treated slightly differently.

You'll also notice that changes to the bots behaviour have been made, which generally are to produce more complex behaviour for more realistic decision making (for example picking up items in combat is now a more complex decision). The differences between the easier bots (for example barney) and the harder bots (for example mantas) is now very marked. I often play 1 against 2 with mantas and barney and it's often a frag race against mantas with barney dying all the time.

Another mode has been added to the botcam (autotracking) and various small bugfixes have been made (like beeping when the bots say something). Thanks to Bruno for pointing a couple of things out (like the beeping).

I have spent some time reworking the rocketjumping code and this is now coming along quite nicely. The bots will make some nice jumps in the right conditions. On a level like dm6 you can start mantas and follow him round with the botcam. It's not likely to be too long before you see him rocketjump up to the red armor from the rocket launcher below. I took a more scientific approach to rocketjumping this time with height, length, timing and angle calculations beforehand although empirical evidence may suggest some tweaks at a later point.

One of the things which the bots don't do at the moment is to fire grenades into spawn points after killing another player, which seems almost common practice amongst real players. So the question is - is this an ethical practice for a bot ? Should I give them the ability to do it ? Maybe I'll add the option, switchable for the user......but then who would ever switch it on ?

I have now added '-zone 4096' to my command line which seems to cure problems with crashing due to Z_Malloc errors in the Quake engine :) (well for now anyway).

There are many other changes, too numerous to mention for this version but I'm sure that if you have played my bots before then you'll notice some of them. The JNDM6 level is going to be used for my next contest on the web page and looks like being a nice choice. I've seen the bots rocketjumping over the ledge with the megahealth on it and I have even seen them rocketjumping for the quad ;) although I normally play deathmatch 4 with no quad. There are some hard to reach places on this level if you take the time to explore it although you won't find the bots quad rocketjumping from the red armor in order to camp at the top :).

A lot of people have found the 1.05 bot to be a good opponent and quite a challenge. Hopefully you'll find 1.06 to be an improvement over 1.05 not that play is 'harder' but that the bot just plays better, makes 'better' decisions and more skillful movements.

version 1.05:
-------------
It features a couple of bugfixes and fixed waypoints for DM6 (although you can play any levels the fixed waypoints are more optimal), which is the level being used for the first competition. Version 1.04 demos will still be accepted though.

version 1.04:
-------------
A bit of a strange release this one! I have made various small changes although nothing really significant. I have decided to release this version whilst having a short rest. I have made the bots more aggressive and on skill 3 you could have a hard time from several of them. Most of the code changes have been tweaking though and although I'm still not happy about rocket jumping the rest of the movement and path traversal is looking quite good.

Anyway, it would be nice to hear some comments....over to you....

version 1.03:
-------------
Well, this version sees the introduction of rocket arena rules to the bots. I wanted to make this as simple as possible to run, and to be able to switch to rocket arena without restarting Quake,etc. So one command switches to rocket arena rules. I made some changes to the way the bots work in rocket arena, and they are generally more aggressive. I also stopped them jumping up and down a lot in the waiting areas. The main rocket arena pak file should be copied over to the directory with the bots progs.dat file in order to play rocket arena properly. The sounds from this pak file are used, and the level names are also built in so that the levels will be played one after another as for a normal rocket arena server.

One of the problems I had in putting the rocket arena rules in was with ghosting, where the body left behind in the body queue was not a dead body but the frame of a live player. It seems that different people take different approaches to solving this problem, and some settle for merely gibbing the player each time. I took the gibbing out and instead tracked down the root of my problems. The main problem is that as the player switches from DEAD_DYING to DEAD_DEAD to DEAD_RESPAWNABLE some other player function is called which changes the players frame to a live frame, like calling player_run or player_stand,etc. I finally tracked most of the problems down to W_SetCurrentAmmo which calls player_run at the start....Anyway, enough of the technicalities of QuakeC.

Someone said to me that noone plays Classic Quake/Rocket Arena anymore but I think there is a resurgence. I play Quake on the net, and I never get a sub-200 ping - it's normally between 220 and 280. I recently looked at the configuration of an lpb net player to find him using all kinds of different models and console settings and stuff which I really found quite depressing. Thats why I enjoy playing bots. Maybe thats why some of the Quake servers are depressingly empty. The only rocket arena server I know never has anyone playing and to meet an lpb there would be a waste of time for me. So these bots are really dedicated to all the other people out there like me, I hope you enjoy playing and welcome any suggestions. Me...I'm off to check on holy wars....

A couple more weeks....never got around to releasing 1.03 until now. In the meantime I have rewritten the movement code and a lot of the AI. I have made the rocket arena bots seriously aggressive and upped the whole skill level in general. You'll see the bots strafing a lot more now. Added fixed waypoints on dm4 and ztndm3 although dm4 still isn't great to play due to the lava.....

version 1.02:
-------------
Well, this release sees the introduction of a system of dynamic waypoints which has been quite an exercise. I had this idea to create waypoints from features on the levels already (like weapons, armor, etc) which would keep the number of entities low. It turns out that this isn't very easy to do due to trying to chain touch functions together(yuk) but I have introduced a system of waypoints anyway. Basically these are used to guide the bots around when they are in 'roaming' mode with no enemies or items to collect. I have added the ability to dynamically link and unlink the waypoints which has proven to be quite interesting(!), and recently added some record keeping of successful and failed journeys to determine when points can be unlinked/linked together. A journey which is not made quite often can then be unlinked from the waypoints (due to a timelimit, not an interruption).

It will also make waypoints from player positions which I don't regard as 'cheating' since this is just trying to map knowledge of the level as quickly as possible. All it does is produce a set of points that represent possible locations to move to.

There are a few other improvements here and there including a set of aliases when a level has been started, so you can request specific bots by name,etc. Start a level, bring down the console and type 'mantas' and he will appear. (I really do need to do some better documentation for new starters....). Type 'alias' to see all aliases which have been defined. There is one alias 'qweflop' which is actually just used internally for recording the game state during server restarts (it's the only way to get a demo to record for the competitions).

The waypoints probably require some tweaking and I'll do this gradually as the behaviour becomes more apparent. I can see some great possibilities for 1 on 1 play (like eliminating possible opponent positions and fuzzy tracking,etc), but it isn't really useful for multi-opponent play. Anyway, the whole thing can only get better...

A bit further on and the weightings of various functions are looking better but I have compromised the speed a bit. On large levels expect it to be slow....I need to work on this I think....And after some simple optimisations I seem to have improved it a bit. It's something that needs some more work on though...

The CronosBots are now just 7 weeks old :)

version 1.01
------------
Made some bug fixes on competitions on demo recording. I had to make QuakeC jump through a few hoops to get demos to record :). Decided to add a countdown to competitions as well.

After learning the respawn points order on ztndm3 and wiping the floor against Abaddon I have decided to randomise the respawn points. I can't understand why Id didn't do this in the first place.

Botcam will now continue even if it comes across a dead bot (it used to return to the player).

Experimental rocket jumping has been added to the bots abilities, only for the better/harder bots though.

I have been having problems with qcc compiling the bots. It seems to corrupt the compilation which is only seen with a decompiler (which fails to decompile properly and produces corrupted files). When run some very strange things were happening (like no info_player or info_deathmatch start routine,etc when there clearly was). I must have exceeded some internal limit of qcc. I have therefore moved over to proqcc. This seems to be ok, but I was having some initial problems and wasn't sure if was down to proqcc or a bug in the program. I managed to trace some problems to bugs but overall I have wasted a **lot** of time just messing around with different compilers. It really hasn't taken that much to exceed qcc's limits, which was a bit disappointing in a way, and proqcc could yet have some quirks to it which mean I have introduced more bugs (not that I'm at all knocking proqcc, it's by far the best compiler I found and I heartily recommend it).

Following the problems with the compiler I have spent a lot of time tidying up the source code, including all the source code of Id's. This has meant a few bugs being found and corrected including a couple of Id's. It has also meant the bot using more player routines and becoming more tightly integrated into the whole program.

There is now a demo on the web page you can watch. It is a ten minute 1 on 1 with abaddon on ztndm3. Unzip it to your id1 dir and type 'playdemo comp' on the console, making sure you have ztndm3 in your id1\maps directory.

version 1.00
------------
It's a bot. A new bot. Thats all there is to it.

I think it plays ok. It's nice to start with about four bots on a level and just go around nuking them over and over :) At least if you're a good quake player, if not then you might be in trouble.

Seriously though. Read todo.txt for the technical bits. I added a cam and I also added many 'competitions' which are basically timed sessions with certain rules set (like deathmatch 1, 10 minutes with four predetermined bots). There are 16 bots, and they appear in rankings,etc.

Enjoy....Feel free to e-mail me with comments, ideas and suggestions...

(This project was started on 14/06/99 when I got hold of Id's source code, so version 1.00 is about a month old).
