Title : Frogbot Filename : frogbot012c.zip Date : 23 October 1998 Author : Robert Field Email : frog@powerup.com.au Download : http://www.telefragged.com/metro/ What's new in version 0.12 -------------------------- - Various miscellaneous bugs fixed. - ztndm3 support. - Bots can understand air movement on difficult jumps (ie. curved jump prediction). - Qizmo support for smoother Quakeworld play. - More friendly teammates (they hopefully won't try to steal items that you are waiting for). - msg= command in normal Quake, and msg command in Quakeworld now works. - Better bot jumping and ledge avoidance. Though I improved the jump prediction algorithm substantially, I also found (and fixed) quite a nasty jump bug. Basically, in 5 server frames each second a jump request was ignored. Hence either the jump was delayed or too late to make (the delay being the frame time of the server - this was quite bad in the Quakeworld version, which I hadn't tested adequately, since it has only 18.2 server frames per second). - Added experimental lookcheat command. - Added skinfix command. - Source included. - noflash command. What's new in version 0.11 -------------------------- - Colored bodies in GLQuake. - QuakeWorld version. - QuakeWorld emulation in normal Quake version. - Backpack retrieval bug fixed. - Better bot weapon selection. - Faster spawning of bots. - Some changes to AI. What's most needed ------------------ - More map support. How to Install the Modification ------------------------------- If you have a Pak0.pak file in your frogbot directory from a previous frogbot version then make sure that you remove it. It is recommended that you have Quake version 1.06 or later. Unzip frogbot012c.zip into your Quake directory. Include in your command line parameters -game frogbot -zone 1024. The zone command should stop unwanted crashes from happening. It is a good idea to allocate as much memory as possible with the -winmem or -heapsize (GLQuake) commands. For example, -winmem 16 or -heapsize 16384 (preferably more). Having large .cfg files which are executed at startup can cause the Frogbot mod to crash. If this happens then I suggest binding the execution of these to a key. Quick way to spawning Frogbots ------------------------------ addbot, add2bots, add3bots, add4bots will add between 1 to 4 bots. addbot0 through to addbot13 will add one bot of the specified team color. Note: Due to the loading mechanism, be patient when spawning bots. Removing Frogbots ----------------- removebot removes the last bot that joined the game. removeallbots removes all bots. More advanced ways of spawning Frogbots --------------------------------------- The first thing you should do is grab yourself a copy of the Frogbot Editor by Tony Browneller. This is a cool program that makes it easy to create custom bots (eg. it has a graphical method for making bot names). Some of the commands that follow are superseded by the use of the Editor. In the frogbot/bots directory you will see files with the .bot suffix. Executing one of these will spawn the bot with the information of that file (or any existing information such as skill if this isn't in the file). You may make your own .bot file and then execute it to spawn a bot to your liking. You can select the name, skin (you need a player.mdl file for this - place this file in the directory frogbot/progs), skill, and colors (both teamplay 0 and teamplay). By default, using the addbot commands will randomly spawn a bot from the list specified in frogbot.cfg. Any .bot file you create can be added to the random spawn list by editting frogbot.cfg. Follow the existing pattern (eg. the number on the first line is the number of bot aliases following). A .bot file should start with the following 2 lines: wait;lines= wait;impulse 26 26 here means that there is a total of 26 non-blank lines in the file. Though it is optional, it is very useful in stopping reading error messages of your .bot file, especially if you are a client logging into a Frogbot server (note that if you spawn a bot on a server, your own listing of .bot files is used, not those on the server - so you can turn up with your own Frogbot 'buddies'). A .bot file should end with addbot (though possibly with addbot0 through addbot13 - however, teamshirt= and teampants= discussed below supercede this command). The lines= command above checks lines up to this point. At this point it may be beneficial to refer to bots/hello.bot. It will spawn a bot with name 'Hello' (with some decoration), color 2 13 during teamplay 0, color 5 4 during teamplay, skill 105, skin 3 (in Quake), and skin ancients (in QuakeWorld). The name= command ----------------- The name= command must be followed by a sequence of impulse numbers which specify the characters of the name you are creating. You must indicate the end of this sequence with impulse_0 (NOT impulse 0). Use the lettercodes command to tell you what numbers correspond to what letters (type lettercodes more than once to cycle through the entire list). The setname command ------------------- You can use the name= command with the setname command to make your 'fun' name. Execute hello.nam to see an example of this. The admin= command ------------------ The admin= command must be followed by 3 impulse numbers. This sets your admin code. By default a server and the clients have admin code 0 0 0. The listen server, or the first client logging onto a dedicated server, not only sets their own admin code by the admin= command, but also sets the server admin code. Many commands will only work if your admin code is equal to that of the server. To enable everyone to execute any command, just leave everyone's admin code as 0 0 0 (ie. ignore the admin= command). impulse_0 reminder ------------------ If you want to use impulse 0, then use impulse_0 instead (impulse 0 doesn't work). All impulse commands should be in the range from 0 to 254 (255 is missing since I internally use it for 0). Other '=' commands ------------------ The list of the other '=' commands is: skill=, skin=, shirt=, pants=, teamshirt=, teampants=, bots=, teamplay=, deathmatch=, timelimit=, fraglimit=, addbot=, msg=. All these commands must be followed by a single impulse command. skill=, skin=, shirt=, pants=, teamshirt=, teampants= set particular attributes of bots you spawn. For a listen server, skill and skill= do the same thing. Also, setting teamshirt= and teampants= to say 4 and then using addbot, is equivalent to using addbot4. The msg= command is just like the Quakeworld msg command. It has values 0 to 3 ranging from all messages being printed to none being printed. The bots= command is used in the frogbot.cfg file. This is the only place it should be used, and should be changed as you add more bots to the random spawn list in frogbot.cfg. teamplay=, deathmatch=, timelimit=, fraglimit= give remote access to the corresponding variables on the server. addbot= is used to spawn multiple (random) bots. Note: If you use color 14 with color command then a random color will be used. The noflash command ------------------- This command toggles whether or not the screen flashes when you pick up an item or are being hurt. By default the screen flashes. The skinfix command ------------------- When enabled this option eliminates the invalid skin# error messages that can happen in normal Quake when you use a skin and have the eyes. Unfortunately, the shaft appears a bit strange when you have the eyes with this option enabled. Remark on included .bot files ----------------------------- The included .bot files in the random spawn list (in frogbot.cfg) contain only name and teamplay 0 information. Other information may be specified at runtime. By default bots will spawn in your team, though the addbot0 to addbot13 are useful for simple start up of team games. Remark on recording demos ------------------------- If you use addbot to spawn a random bot during a demo, on playback the demo will contain the 'init' command, and the 'exec' command. To avoid this, either have the bots already spawned, or include the entire contents of your desired .bot file in an alias command. For example: alias thresh "wait;lines=;wait;impulse 15;wait;name=;wait;impulse 212;wait;impulse 104;wait;impulse 114;wait;impulse 101;wait;impulse 115;wait;impulse 232;wait;impulse_0;wait;shirt=;wait;impulse 2;wait;pants=;wait;impulse 1;wait;addbot" Then type 'thresh' to spawn your punching bag. Teamplay rules -------------- teamplay 0 - every man for himself. teamplay 1 - teammate and self health protect. teamplay 2 - teammate kill frag penalty. teamplay 3 - teammate health protect. teamplay 4 - teammate health and armor protect. teamplay 5 - teammate health and armor protect, self health protect. (warning: in teamplay you suicide if you change pants color). (note: unlike regular Quake, you must restart a map for new teamplay settings to take effect with the Frogbot mod). Deathmatch rules ---------------- deathmatch 1 - all items respawn. deathmatch 2 - only weapons stay. deathmatch 3 - weapons stay and other items respawn. deathmatch 4 - start with full armor, 250 health, all weapons except the grenade launcher, unlimitted ammo. health and armor respawn. quad becomes octa. deathmatch 5 - start with full armor, 200 health, all weapons. items besides weapons respawn. deathmatch 6 - start with full armor, 100 health, all weapons, sufficient ammo. no items. (not Rocket Arena, in case you were wondering). Gameplay commands ----------------- powerup - toggles powerups on and off. rune - allow/disallow runes. strength: doubles the damage you inflict resistence: halves the damage you receive haste: increases your firing rate regeneration: regenerates your health and/or armor hook - allow/disallow hook for clients (Frogbots don't use it currently). use_hook - use the hook if it is allowed (bind this to a convenient key). custom - toggle use of CTF custom sounds and models (you need to copy the Threewave Capture Pak0.pak and Pak1.pak files into the frogbot directory for this to work). Note: CTF is not currently supported. match - toggle countdown match mode. ready - start 15 second timer (in match mode). rl_pref - toggle Frogbots' preference of rocket launcher over the shaft. Physics altering commands ------------------------- qwphysics - enables QuakeWorld emulation in normal Quake. qwaim - enables QuakeWorld crosshair in normal Quake. rune_rj - if runes are allowed and rune_rj is set then self-inflicted splash damage/momentum (eg. for a rocket jump) is the same as for normal Quake. lavacheat - Toggles whether the Frogbots will cheat in their avoidance of lava and cliffs. lookcheat - Toggles whether the Frogbots will cheat in their ability to see you. Skill settings -------------- skill is from 0 to 200 (default 100 is the hardest noncheating skill). Note: Once a Frogbot is spawned it retains its initial individual skill level (the skill setting when it was spawned) even if you change the skill variable at the console later. To change the skill of the Frogbots you should remove them from the game. Note: By spawning a few Frogbots, then changing the skill variable, then spawning a few more Frogbots, you can have different skill Frogbots in the same game. Above skill 100 the Frogbots will cheat with their aim by not shooting at the crosshair. For a challenge (or not) try skill 200 Frogbots with lavacheat enabled. User commands ------------- frogbot - Toggle the internal frogbot AI taking control of your controls. Sit back and enjoy the smooth ride. kascam - Toggle kascam camera. This camera uses the Kascam 'engine' but I have modified its interface. Use fire button to change between the observer, kascam, and kascam follow modes. Use jump to move up in observer mode, and change target in the other modes. impulse 1 toggles auto/lock target. The observer mode is a modification of the CTF observer mode. time - prints time (useful in match mode for the correct time). Miscellaneous commands ---------------------- samelevel - stores the above commands' configuration (you could set it in your autoexec.cfg after you find out what it is for a configuration - this number may change in future versions). framerate - prints three framerate numbers on screen. For debug/testing purposes only. hide - this toggles hiding many of the frogbot print messages so that things seem more like a real game (not recommended). noskins - if enabled this will not allow people or bots to use skins (normal Quake). Warning about restart command ----------------------------- I advise against using the restart command. It is preferable to use either the changelevel or map commands. The restart command doesn't save parm information, so your settings will be those that you had at the start of the previous map, not the end of the map. Supported maps -------------- Currently supported maps: dm4, dm6, ztndm3 ... doh! The commands map_dm4 and map_dm6 will remotely change the current map. Notes on computer requirements and dedicated servers ---------------------------------------------------- If you want to run a large game (say 8 or more players) then if you are not using a Pentium II you will need to run a dedicated server. I tested a dedicated server with 16 players (15 bots) first with a 66 MHZ 486 and then with a 133 MHZ Pentium. You can forget about running a dedicated server with a 486, since I got only 10 fps with the 486. The dedicated Pentium server on the other hand had 35 fps using WinQuake and 40 fps (the maximum, set using sys_ticrat 0.025) using the MS_DOS prompt. About the mod ------------- The Frogbot mod is a tribute to the excellent gameplay of multiplayer LAN Quake and my continuing attempt to create a bot that is believably human. I judge my efforts largely on the game product you play. The current AI of the Frogbot is what I would regard as a fairly minimal working model. I do intend to greatly improve it over time. Though it is true that QuakeC presents limitations of all sorts, by using a bit of ingenuity I have been able to push QuakeC to the limits. The first requirement of a 'human' bot, as opposed to a 'bot' bot, is fluent navigational skills. With the sacrifice of using static waypoints the Frogbot can achieve fluent navigation around a level, and moreover can actually be programmed in QuakeC (this is assuming todays relatively slow cpu speeds). The Frogbot is basically an exact client emulation bot. I have decided to make my so far incomplete efforts available to the Quake community so that other people can share in the enjoyment of playing the Frogbot. Quakeworld version notes ------------------------ I don't personally play Quakeworld since I only play LAN Quake. Though I have done a Quakeworld version of the Frogbot mod for people who prefer Quakeworld. If you are running a Quakeworld server and client on the same computer then you should use the Priority Controller by Alan 'Strider' Kivlin. The Quakeworld version is more choppy than the Quake version. I have tried to fix this by emulating the network messages sent by clients with the help of the Qizmo proxy (http://qizmo.sci.fi). To enable this mode the server should execute the command line: localinfo proxy 1 To disable this mode (if you have enabled it - it is off by default) the server should execute the command line: localinfo proxy 0 You must connect through a proxy that is compatible with this mode, such as the Qizmo proxy. It does seem to make a difference, though I haven't implemented the full range of client network prediction messages. The network code is in SetPlayerInfo in lists.qc. I am open to anyone with an understanding of the qwd specs to send me their version of this function to me. They could use in addition to the current variables (and others like frametime), the enumerated variables QW_version, self.arrow, self.button0, self.button2. PLEASE DO NOT ASK ME HOW TO GET QIZMO WORKING WITH THE FROGBOT. I managed to get it working with the command line: C:\qizmo\QIZMO.EXE -a frogbot -b c:\quake -p 27501 This was after I had run qwsv.exe and priority.exe. Then I connected to the proxy with: connect localhost:27501 Copyright and Distribution Permissions -------------------------------------- The modifications included in this archive are Copyright 1998, Robert Field. The original QuakeC source is Copyright 1996, id software. You may distribute this Quake modification in any electronic format as long as all the files in this archive remain intact and unmodified and are distributed together. Disclaimer ---------- Software under this agreement is under no kind of warranty. Software under this agreement is provided as is, and isn't guaranteed in any way by the mod author. Use this software at your own risk. Code Credits ------------ id softare for Quake and QuakeC. Alan 'Strider' Kivlin whose scoreboard code let me understand how to do the scoreboard for QuakeC bots (normal Quake and Quakeworld). He also indirectly taught me the color bot and thud removal methods. Mr Elusive for suggesting a better stair climbing method, and for suggesting Alan Kilvin's color bot and thud removal methods. Simon Byrnand whose bot physics code gave me an idea to make the above stair climbing code more efficient (I was able to eliminate my call to droptofloor). Uwe Girlich for the unofficial DEM and QW format description which partially helped me to extend Alan's scoreboard code idea to support selectable bot names (in Quake and QuakeWorld). Karel 'Kasuha' Suhajda for the KasCam DeathMatch Camera code. Dave 'Zoid' Kirsch for the CTF code. Compiler Credit --------------- This mod was compiled with meqcc.exe, the 'undecompilable' QuakeC compiler written by Mr Elusive. The resulting progs.dat is shorter than that produced with most compilers. John Cook for the preqcc precompiler. Names Credit ------------ Timm Stokke for zap, yoda, frag-god, dragon, Superman, and dizzy. Mark 'Dethon' Petler for killingmachine, generalfailure, corpsegrind, and addicted2quake. Further Thanks -------------- Tony Browneller for his excellent Frogbot name Editor. Mr Elusive for providing inspiration with his impressive Omicron bot. If you haven't played it then what are you waiting for! Timm Stokke for helping with the beta testing, for providing space on Metropolis and being curious about the Frogbot when it was a Tadpolebot. :) Alan 'Strider' Kivlin for writing the Priority Controller program which enables having a Quakeworld server and client on the one computer. The Bot Epidemic and Randar for their support. All the people who have given me feedback (positive or negative), especially with regard to bugs. To anyone who wants to do me a better readme. :)