/////////////////////////.///////////////// lOkO Q2 MegaMod beta 0.14 - October 2005 /////////////////////////////////////////// www.angelfire.com/jazz/loko lOkO bot beta .14 Manual ------------------------ The lOkO bot is a modification of the ACE II bot source version 0.7. The ACE II bot source was written by Steve Yeager. The lOkO bot was written by Lou Korosy aka lOkO. The ACE II bot source was a modification of a version of the Quake2 game dll source code from id software and the Three Wave Capture the Flag source code by Zoid. This is a beta version of the dll and the documentation. DISCLAIMER: This software is provided as-is with no implied warranty or support. Use at your own risk; I assume no responsibility for any damage to any hardware, software, firmware, middleware, swimwear, underwear etc. that may occur as a result of using this software. That said, this software has been play tested for hundreds of hours and has caused no harm to any computer hardware or living thing it's been tested on. This software is not for sale and is not to be sold. Please distribute the entire zip archive file with all files intact. You need Quake2 version 3.20 and CTF 1.50 installed to play the lOkO mod. Quake, Quake2, Q2 and any words remotely resembling quake (but not quack, quark or quinine) are trademarks of id Software. Kneel and bow towards Mesquite. Table Of Contents ----------------- 1.0 Overview, Installation and Startup 1.1 Game Features 1.2 Bot Features 1.3 Installation and Startup 2.0 Game Details 2.1 Server Options 2.1.1 Weapons Management 2.1.1.1 Weapons 2.1.1.1.1 Alternate Fire Modes 2.1.1.1.1.1 Q2 Weapons only 2.1.1.1.1.2 Napalm Weapons Only 2.1.1.1.1.3 Cost Mode 2.1.1.1.1.4 Arms For Heads 2.1.1.1.1.5 Fixed Weapons 2.1.1.1.1.6 Low Cost Mode 2.1.1.1.2 Available Fire Modes 2.1.1.1.3 Max Ammo and Ammo at Startup 2.1.1.1.4 Misc. Ammo Options 2.1.1.2 Weapons Control 2.1.1.2.1 Configuring Start Weapons 2.1.1.2.2 Banning Weapons 2.1.1.2.3 Configuring 'Insta-Gib' servers 2.1.1.2.4 Misc. Weapon Options 2.1.1.2.4.1 CTF Grapple as weapon 2.1.1.3 Third Party Killers 2.1.1.3.1 AirStrikes 2.1.1.3.2 Voodoo Homing Heads 2.1.1.3.3 Monster Sidekicks 2.1.1.3.3.1 Controlling Monster Sidekick Costs 2.1.2 Server Gameplay Options 2.1.2.1 Respawn Protection 2.1.2.2 Dropping Backpacks 2.1.2.3 Ejecting Shotgun Shells 2.1.2.4 Ejecting Bullet Casings 2.1.2.5 Feed The Mutant 2.1.2.6 Bots vs. Humans 2.1.2.7 Locational Damage 2.1.2.7.1 Locational Damage, Head Shots Only 2.1.2.8 Announce Headshots 2.1.2.9 Turning Footsteps off/on 2.1.2.10 Haste For All Players 2.1.2.11 Vampire For All Players 2.1.2.12 Max Health and Start Health 2.1.2.13 Start Armor 2.1.2.14 No Hook and/or No Grapple 2.1.2.15 Default KillerCam 2.1.2.16 Standard iD Options 2.1.2.17 Playing Tag 2.1.2.18 Action Quake2 Doors 2.1.2.19 Deathmatch Monsters 2.1.2.19.1 Server Spawned Monsters 2.1.2.19.1.1 The savemonsters server command 2.1.2.19.1.2 The use_monster_file server cvar 2.1.2.19.1.3 Using a Text Editor to Create/Edit a Monster File 2.1.2.19.2 Capture the Flag Team Monsters 2.1.2.19.2.1 The ctfmonster server command 2.1.2.19.2.2 The savectfmonsters server command 2.1.2.19.2.3 The use_ctf_monster_file server cvar 2.1.2.19.2.4 Using a Text Editor to Create/Edit a CTF Monster File 2.1.2.19.3 The removemonsters server command 2.1.2.19.4 The monster_kill_bonus server cvar 2.1.3 Misc. Server Options 2.1.3.1 OpenGL Fog Options 2.1.3.1.1 Fog Options Cvars and Commands 2.1.3.1.2 Fog Options Files 2.1.3.1.3 Default Fog Options File 2.1.3.2 Map Rotation 2.1.3.3 Adding Items/Monsters to Maps 2.1.3.3.1 Manually Adding Items/Monsters to Maps (console) 2.1.3.3.2 Extra Map Item/Monster Files 2.1.3.3.2.1 Saving Extra Items/Monsters to Disk 2.1.3.3.3 Spawning Random Health 2.1.3.3.4 CTF Flag Position File 2.1.3.4 Additional Techs 2.1.3.5 Additional Powerups 2.1.3.6 MegaHealth Bug/Feature 2.1.3.7 game_engine Server Cvar for Quake2 Engine Mod Compatability 2.1.3.8 no_target_speaker Server Cvar 2.1.3.9 save_scores Server Cvar 2.1.3.10 Playing Action Quake2 Maps 2.2 Client Options 2.2.1 Hud Options 2.2.1.1 Ammo Hud 2.2.1.2 No Hud 2.2.1.3 Laser Sight 2.2.1.4 Scanner 2.2.1.4.1 Scanner Offset 2.2.1.4.2 Scanner Range 2.2.2 Spectator Chase Cam 2.2.2.1 Turning Chase Cam on/off 2.2.2.2 Changing Chase Cam Camera Position 2.2.2.2.1 Chase Cam Standard Positions 2.2.2.2.2 Chase Cam Custom Positions 2.2.2.3 Killercam 2.2.3 Ycam (3rd person perspective) 2.2.3.1 Turning Ycam on/off 2.2.3.2 Changing Ycam Camera Position 2.2.4 Client Weapons/Ammo Commands 2.2.4.1 tosshead 2.2.4.2 airstrike 2.2.4.3 detpipe 2.2.4.4 firemode 2.2.4.5 cyclefiremode 2.2.5 Client Monster Sidekick Commands 2.2.5.1 The sidekick Client Command 2.2.5.2 The bestsidekick Client Command 2.2.5.3 Teleporting Your Monster Sidekick 2.2.6 Client Misc. Commands 2.2.6.1 Standard iD Client Commands 2.2.6.1.1 viewpos 2.2.6.1.2 id 2.2.6.2 Additional lOkO Client Commands 2.2.6.2.1 +jetpack alias 2.2.6.2.2 off-hand hook commands 2.2.6.2.3 CTF Grapple commands 2.2.6.2.4 svstatus command 2.2.6.2.5 altscore command 2.2.6.2.6 zoom scope 2.2.6.2.7 botskills command 2.2.6.2.8 botroles command 2.2.6.2.9 monsterscore command 2.2.6.2.10 showdmflags command 2.2.6.2.11 itemsum command 2.2.6.2.12 extrasum command 2.3 Bots 2.3.1 Managing Bots 2.3.1.1 Adding Bots 2.3.1.1.1 The allow_bot_menu Server cvar 2.3.1.1.2 The botmenu command 2.3.1.1.3 The addbot command 2.3.1.1.4 The loadbot command 2.3.1.2 Removing Bots 2.3.1.3 Killing Stuck Bots 2.3.1.4 Re-spawning Bots Across Level Changes 2.3.1.5 Other Bot Options 2.3.1.5.1 Bot Chat 2.3.1.5.2 Bot Hazard Detection 2.3.1.5.3 Bot Laser Site 2.3.1.5.4 Bot CTF Auto Role 2.3.1.5.5 Explicit Bot CTF Roles 2.3.1.5.5.1 Commands For Displaying Node Locations 2.3.1.5.5.1.1 The findnode command 2.3.1.5.5.1.2 The shownode command 2.3.1.5.5.1.3 The shortpath command 2.3.1.5.5.1.4 The itematnode command 2.3.1.5.5.2 Commands For Explicit Bot CTF Roles 2.3.1.5.6 Bot Navigation Without the Off-Hand Hook 2.3.1.5.7 Bot Hydrophobia 2.3.1.5.8 Bots and the notarget command 2.3.1.5.9 Viewing Bot AI 2.3.1.5.10 Verbose CTF Bots cvar 2.3.1.5.11 CTF botlocations command 2.3.1.5.12 bot_sound_perception cvar 2.3.1.5.13 bots_see_thru_water cvar 2.3.1.5.14 teleport_dislike cvar 2.3.1.5.15 train_dislike cvar 3.0 Sample Configuration Scripts 4.0 Known Problems 5.0 Tips and Tricks ================================================================================== 1.0 Overview ------------ 1.1 Game Features ----------------- Play as a full blown weapons mod, straight quake 2 deathmatch, "lithium"-like deathmatch, Capture the Flag or customize the gameplay; features toggle on/off with server cvars. Multiple alternate fire modes for all weapons; all weapons have one alternate fire mode that can set opponents on fire. Or just play with the default Quake2 weapon firemodes. Off-hand laser hook in addition to the standard CTF grapple, or both can be banned Fragged players drop backpacks full of their weapons and ammo Togglable Pro-Rocket emulation (fast weapons switching, rocket speed increased, altered radius damage) from the Pro-Rocket specification make the rocket launcher "feel" more like Classic Quake Additional Techs : Vampire, Jetpack, Voodoo, Ammo Regen, Lightning Defense Monsters in Deathmatch: have a monster fight for you or your team; plant respawning or immortal monsters on any map(0.13). Configurable starting weapons/ammo/health/armor Weapons Banning Togglable Locational Damage scoring Active Laser Sight, green if off target, red if on target Enhanced Chase Cam with 7 camera views Third person perspective ycam Enhanced HUD to display all weapons and ammo in your inventory and location damage info, or turn the HUD completely off. Fog for OpenGl 1.1 compliant video cards (and Voodoo Graphics Cards too) Zoom Scope Radar Scanner shows the locations of foes, teammates Homing Heads adapted from the Classic Quake mod Heads - re-animate gibbed heads you pick up, they attack your foes, you get the frags! AirStrikes rain rockets upon your foes Off-hand hook and CTF grapple damage increased from 1 to 10, making either of these hooks useful melee range weapons. If a ctf grapple strikes a player it sticks to them rather than resetting (togglable). Non-invasive addition of weapons/ammo/health/powerups/dmstarts to any level from a simple text file or at the console; add CTF flags to any level, add that Quad Damage wherever you like, add deathmatch spawn points to single player maps ... Ejecting shotgun shells and bullet casings Ring of Shadows powerup (invisibility) like Classic Quake Optional Jetpack for all players Optional Haste (weapon fire rate doubled) for all players Optional Vampire (damage dealt increases your health) for all players Respawn Protection - configurable time of invincibility when you respawn; you won't be able to shoot any weapon (including either hook) during this time period. Feed the Mutant : collect gibbed heads and bring them to the Mutant for mucho frag points (a "Head Hunters"-like game). Play a game of Tag; when you become "it" you get get 666 health, all weapons, get all ammo limits raised by 50 units and a full inventory of each ammo. Players who are "it" get 5 frag points for each frag they get ! Turn off footstep sounds for all players. Standard iD map rotation. Support for Action Quake 2 maps: doors can be made to behave like Action Quake2 (opened withe the opendoor command) and the server can spawn random health items near deathmatch spawn points (0.13) Save scores and statistics to a disk file when the match ends 1.2 Bot Features ---------------- All new bot AI and enhanced movement code. 4 skill levels for bots affecting aim, agility, item acquisition ability, combat skills, aggressiveness and other stuff. Bot uses PRE-MADE node files; can play without nodes but will not navigate the level too well (ahem ...). Pre-Made node files available for over 1500 maps or roll your own (see the LOKOPATHING document). Bots don't have instant reflexes, unreal accuracy, super-human speed or unbelievable agility; they can't perform any move a human could not perform. Bots always plan the shortest path to their destination. Bots try to avoid flames and seek water/health when on fire. Bots hook/grapple out of lava/slime. Bots seek air when in danger of drowning. Intelligent weapon/fire mode switching. Uses all weapons/fire modes/grappling hooks except pipe bombs. Bots use monster sidekicks and teleport them (0.13). Automatic or Manual bot configuration (skill, name, model/skin, team). Use the bot menu to easily add bots to the game. Bots use platforms, teleporters, jump pads, wind tunnels, func_train, etc. Bots will follow the the sounds players/bots make when firing weapons, picking up items, entering/leaving water, using the jetpack, screaming from pain, etc. Bots shoot secret doors and shootable buttons. Teamplay support and CTF abilities - the bots can play CTF on most maps, even non-ctf maps (they play CTF on any map if a bot path exists). Let the bots play CTF on their own or explicitly command your team. Bots gib dead bodies to harvest gibbed heads when needed. Bots open and navigate doors on Action Quake2 maps (0.13) 1.3 Installation and Startup ---------------------------- The zip file should be un-zipped into your Quake2 directory with "use directories" or whatever settings in your unzip program preserve the directory structure of the zip file when it writes the files to disk (ie. unzip into C:\Quake2 if that's the place you installed Quake2). The directory structure should look like: (warning: programmer art ahead ...) Quake2--|-- loko ---|--- fog | | | |----items | | | |----scores |-- lokonav The loko directory should contain gamex86.dll, pak0.pak, configuration files (.cfg) and all text (.txt) except flag_positions.txt The fog directory should contain all fog files (.fog). The items directory should contain all extra item files (.xif), monster files (.mon), ctf monster files (.tmo) and the flag_positions.txt file. The scores directory should contain the scores.doc file The lokonav directory should contain all the bot route files, known as "noodle" files (.ndl). You can save much disk space if you only extract the noodle files for the maps you have. If the fine illustration above isn't clear, the lokonav directory is in the Quake2 directory, *not* in the Quake2\loko directory. You start the loko mod from your quake2 directory with the following commands: For normal deathmatch: quake2 +set game loko +set deathmatch 1 +set ctf 0 +map q2dm1 For Capture the Flag: quake2 +set game loko +set deathmatch 1 +set ctf 1 +map q2ctf1 I usually run a batch file to start Q2; here's an example: c: cd \quake2 quake2 +set game loko +set deathmatch 1 +set ctf 0 +map %1 If I named this file lokobot.bat, to play the map spogdm1 I'd invoke it with a command line of: lokobot spogdm1 Note: you will have to move the pak file containing the CTF maps,graphics, models and sounds in the quake2\ctf directory to the the quake2\baseq2 directory if you haven't already (make sure you rename it first so you don't overwrite an existing pak file); you can alternately move or copy the CTF pak file to the quake2\loko directory. A third alternative is to extract what is needed from the CTF pak file into the appropriate directory off quake2\baseq2 or quake2\loko using a pak file utility program. CTF Note: Players can use any player model in CTF/teamplay but the skin names **MUST** be "ctf_r" for the red team and "ctf_b" for the blue team; the game server must have skins named ctf_r.pcx, ctf_r_i.pcx, ctf_b.pcx and ctf_b_i.pcx for each available model. Extract these files for the male and female player models from the ctf pak file into the quake2\baseq2\male and quake2\baseq2\female directories to show these models on the add bot menu when playing CTF. 2.0 Game Details ---------------- 2.1 Server Options ------------------ All server option parameters are controlled using server cvars, variables stored in memory by the server which can only be altered by the server operator. The value of each cvar can be set on the command line (ie. '+set ctf 1') or can be set in the autoexec.cfg file in the game directory, which is executed when the server is initially started. The value of any cvar not specified on the command line or in the autoexec.cfg file is set to a default value by the dll. Of course you can set any server cvar at the console too. Cvar names for the loko mod usually have undersores (_) in their name; command names never have underscores. 2.1.1 Weapons Management ----------------------------- 2.1.1.1 Weapons --------------- The original Q2 weapons have been enhanced with alternate fire modes that fire many different types of ordinance. The availability and cost of each alternate fire mode for each weapon is configured by setting various server cvars. Weapon switching is performed in the same manner as normal Q2, by pressing one of the number keys which are bound to the use weapon functions. Acquiring a weapon gives access to all the alternate fire available for that weapon provided the server settings allow the use of alternate fire modes. Repeatedly pressing the number key associated with the use of a weapon will cycle through all the available alternate fire modes for the weapon. 2.1.1.1.1 Alternate Fire Modes ------------------------------ cvar weapons_mode The availability of the different alternate fire modes is configured using the server cvar weapons_mode. Fire modes may be limited to normal Q2 fire mode only, Napalm fire mode only, each weapon can have a "fixed" fire mode (ie. the hyperblaster only fires lightning), or all fire modes may be available either by cost (ie. normal rockets cost 1 rocket, a homing rocket costs 5 rockets, etc.) or low cost (all different fire modes have the same cost ie. supershotgun costs 2 shells, freeze shells cost 2 shells). In Low Cost mode, BFG shots cost 50 cells, supershotgun blasts cost 2 shells, blasters cost 0, all other weapon's fire modes have a cost of 1. Command line examples: '+set weapons_mode 0' limits ammo to the default Quake II fire modes. '+set weapons_mode 1' limits ammo to Napalm fire mode (the second fire mode for each weapon). '+set weapons_mode 2' invokes Cost mode '+set weapons_mode 3' invokes Arms For Heads mode '+set weapons_mode 4' invokes Fixed Weapons mode '+set weapons_mode 5' invokes Low Cost mode The default weapons_mode is 2 (cost mode). 2.1.1.1.1.1 Q2 Weapons Only ---------------------------- Like it says, only the original Q2 weapon fire modes are available for each weapon. Invocation on the command line: '+set weapons_mode 0' For people who deem the Q2 blaster bolts too laggy, setting the server cvar laser_blasters to 1 substitutes an instant hit green laser beam for the bolts from both the blaster and the hyperblaster. For people with cpu cycles to burn, setting the cvar bouncing_blaster_bolts to 1 causes bolts from the blaster and the hyperblaster to ricochet off walls. The laser_blasters cvar only has an effect when weapons_mode is set to 0; the bouncing_blaster_bolts cvar effects all weapon fire modes that allow blaster bolts. 2.1.1.1.1.2 Napalm Weapons only -------------------------------- Each weapon has one "Napalm" fire mode from the Napalm Quake2 mod. Setting the weapons_mode cvar to 1 limits the Quake2 weapons to using only Napalm fire modes, either fireballs, flames, ammo that explodes into flames or ammo which has a chance to set the inflicted on fire; they will remain on fire for about 6 seconds. Change the cvar flame_time value to suit your taste (medium rare to well done). Incendiary shells and bullets have a 1 in 10 chance of setting the inflicted on fire. Fire will be transferred from one player to another if they get too close. Fire will remain burning for a while after a player/bot is bar-b-qued to death and anyone walking thru the flames will burn too. Fire is immediatley extinguished when a flaming player/bot acquires health, jumps into water up to it's waist or is frozen. Some Napalm ammo is completely useless underwater; Fireballs and the flame throwing hyperblaster produce only steam. The bots are aware of this and will switch weapons or fire modes to something more effective. A bot on fire will immediately try to head for water, even if it means lunging forward towards a heavily armed attacker. Invocation on the command line: '+set weapons_mode 1' 2.1.1.1.1.3 Cost Mode ---------------------- In cost mode ALL fire modes are available for use (provided you've acquired the weapon). Each weapon's fire mode ammo costs are configured by a cvar except the regular quake2 fire modes; the default Q2 fire modes cost their normal amount of ammo, 0 for the blaster, two shells for the super shotgun, 50 cells for the bfg and 1 bullet/shell/slug/cell/rocket/grenade for each other weapon. Ammo costs for all weapons except the blaster is the cost in the normal ammo for the weapon, ie. the ammos for the shotgun is expressed in shells, ammo for the rocket launcher is expressed in rockets, etc.; the exceptions are the additional fire modes for the blaster. fireball_blaster_cost 2 (shells) laser_blaster_cost 1 (cells) pistol_blaster_cost 2 (bullets) beam_shotgun_cost 3 (shells) electric_shotgun_cost 3 incendiary_sshotgun_cost 3 (shells) freeze_sshotgun_cost 4 tesla_sshotgun_cost 5 fireball_machinegun_cost 2 (bullets) rocket_machinegun_cost 4 corkscrew_machinegun_cost 2 incendiary_chaingun_cost 2 (bullets) plasma_chaingun_cost 3 flame_grenades_cost 2 (grenades) vortex_grenades_cost 4 cluster_grenades_cost 5 electric_grenades_cost 3 pipe_grenades_cost 3 touch_grenades_cost 2 flame_rockets_cost 2 (rockets) triple_rockets_cost 5 homing_rockets_cost 5 impact_rockets_cost 2 flame_thrower_cost 2 (cells) laser_hyperblaster_cost 2 lightning_gun_cost 3 meteor_railgun_cost 5 (slugs) gibflute_railgun_cost 10 (slugs per 1/2 second of use) antimatter_bfg_cost 60 (cells) neutroncloud_bfg_cost 60 You can effectively ban any non-standard firemode in Cost mode by setting it's cost to an unattainable value, ie. 'set cluster_grenades_cost 9999'. Invocation on the command line: '+set weapons_mode 2' 2.1.1.1.1.4 Arms For Heads --------------------------- In Arms For Heads weapons mode, each weapon you acquire initially can use only the default Q2 fire mode for that weapon; your weapons are upgraded as you pick up gibbed heads. When your weapons are upgraded they have the ability to use alternate fire modes but the ammo cost for the additional alternate fire capablilities, unlike Cost mode, remains at the cost of the normal Q2 ammo for that weapon, ie. all blaster ammo is free (cost = 0), all supershotgun fire modes cost 2 shells, all bfg fire modes cost 50 cells, all other weapon fire modes cost 1 (yes, the cluster grenade only costs you one grenade, the homing rocket only costs you one rocket, etc.). Each upgrade is cumulative, meaning once you upgrade your weapons they never lose the ability to use the additional alternate fire modes (until your butt has been fragged, of course). The cost of each upgrade is configured by a series of cvars. The table below is a summary of each upgrade: Default Cost Upgrade (in heads) Upgrade Description ------- ------------- ---------------------------------------- 1 5 Weapons in you inventory can fire normal Q2 ordinance and Napalm ordinance 2 10 Weapon in your inventory have all alternate fire modes available. 3 15 You get all Q2 weapons that you don't already have (including weapons that don't exist on the map) and a small amount of ammo for each weapon. 4 20 You get the maximum amount of ammo for each weapon in your inventory and your health is maxxed too. 5 25 Your maximum amount of ammo for each weapon is increased by 50 and your health and armor are maxxed, plus you get 30 seconds of a random powerup, either Quad Damage, Invincibility or Invisiblity. After you reach upgrade 5, for each additional 10 heads you acquire you get 30 seconds of a random powerup, either Quad Damage, Invincibility or Invisiblity. cvars: upgrade1_cost, upgrade2_cost, upgrade3_cost, upgrade4_cost, upgrade5_cost. Invocation on the command line: '+set weapons_mode 3' 2.1.1.1.1.5 Fixed Weapons -------------------------- In Fixed Weapons mode only one fire mode is available for each weapon you have. For example, if the server operator wishes to use the normal Q2 weapons but replace the hyperblaster bolts with the lightning gun they would set fixed_hb_weapon = 3 and all other fixed weapons to 0. Ammo costs remain at default Q2 values (blaster costs 0, supershotgun costs 2, bfg costs 50, all others cost 1). The ammo is configured in Fixed Weapons mode thru the following server cvars: fixed_bl_weapon - fixed blaster weapon 0 = regular blaster 1 = fireball blaster 2 = laser blaster 3 = berreta fixed_sg_weapon - fixed shotgun weapon 0 = regular shotgun 1 = flame burst shotgun 2 = Ion Pulse shotgun fixed_ssg_weapon - fixed supershotgun weapon 0 = regular supershotgun 1 = Incendairy supershotgun 2 = Freeze supershotgun 3 = Tesla supershotgun fixed_mg_weapon - fixed machinegun weapon 0 = regular machinegun 1 = fireball machinegun 2 = rocket machingun 3 = Corkscrew machingun fixed_cg_weapon - fixed chaingun weapon 0 = regular chaingun 1 = Incendiary chaingun 2 = Plasma Chaingun fixed_hg_weapon - fixed hand grenade weapon fixed_gl_weapon - fixed grenade launcher weapon 0 = regular grenades 1 = flame grenades 2 = vortex grenades 3 = cluster grenades 4 = det pipe grenades 5 = field effect grenades 6 = touch grenades fixed_rl_weapon - fixed rocket launcher weapon 0 = regular rockets 1 = flame rockets 2 = homing rockets 3 = triple rockets 4 = impact rockets fixed_hb_weapon - fixed hyperblaster weapon 0 = normal hyperblaster 1 = flame thrower 2 = laser hyperblaster 3 = lightning gun fixed_rg_weapon - fixed railgun weapon 0 = normal railgun 1 = Meteor railgun 2 = Gib Flute fixed_bfg_weapon - fixed bfg weapon 0 = normal bfg 1 = AntiMatter bfg 2 = Neutron Cloud Invocation on the command line: '+set weapons_mode 4' 2.1.1.1.1.6 Low Cost Mode -------------------------------- In Low Cost mode all different fire modes for all weapons are available for each weapon and have the same cost as the normal Q2 weapons (ie. supershotgun costs 2 shells, freeze shells cost 2 shells). All blaster firemodes are free, all supershotgun fire modes cost 2 shells, all BFG fire modes cost 50 cells, for all other weapons the cost of all fire modes is 1. Invocation on the command line: '+set weapons_mode 5' 2.1.1.1.2 Available Fire Modes ------------------------------ All standard Quake II fire modes are available as the default choice. Napalm Fire Mode is always the second choice for all weapons. The duration of flames burning humans/bots is configurable by the server cvar flame_time (defaults to 6 seconds). The available fire modes for each weapon: Weapon Fire Mode ------ -------------------------------------------------------------- Blaster : 0. Normal blaster 1. Fireball blaster - will set inflicted on fire for 6 seconds, doing about 10 damage per second. If you get hit when your health is 100 you will not die. A second hit, though ... Completely useless under water (unless you really like steam). From the Napalm II mod. In Cost mode this fire mode uses shot gun shells. 2. Laser Blaster - shoots a green laser beam that does the same damage as the normal blaster, except it instantaneously hits the opponent (normal blaster bolts travel at 600 units per second). In Cost mode this fire mode uses cells. From Qdevels tutorial. 3. Berreta - shoots bullets; In Cost mode this fire mode uses bullets. Damage inflicted by berreta shots is subject to location damage when location damage is turned on. Shotgun: 0. Normal Shotgun 1. Energy Burst - shoots a very powerful burst of energy at an opponent that will probably set them aflame. Still does damage underwater, though, because the energy turns to flames only on impact. An instant hit weapon (no projectile). From Napalm II mod. 2. Ion Pulse Shotgun - a green pulse of charged particles is hurled at the target at 650 quake units/sec (the speed of the original Quake II rocket); on impact the pulse imparts it's charge upon the victim, reversing the polarity of their chromosomes (... really!). Also does some radius damage so stay away from impact points. The Ion Pulse is deadly at close range but you can shoot it and dissipate the cloud. SuperShotgun: 0. Normal SuperShotgun 1. Incendiary shells - same damage as regular Supershotgun but has a 1 in 10 chance of setting the inflicted on fire (no, not 1 in every 10 shots, each shot has a random 10% chance of flaming your victim). Works well underwater, though no burning). From Napalm II mod. 2. Freeze shells - immobilizes your foe for a configurable number of seconds (cvar freeze_time, default is 4 seconds). Modified from the Weapons of Destruction mod. Frozen victims thaw when set on fire; freezing a burning victim extinguishes the flames. 3. Tesla Coils - two spheres are shot at slightly diverging angles; Bolts of lightning continuously arc from each sphere to the other sphere. The spheres bounce when they hit a solid object. The spheres exist for 5 seconds. Machinegun: 0. Normal MachineGun 1. Fireballs - produces a fast continuous stream of fireballs. Produces steam underwater. From Napalm II mod. 2. Rockets - fires rockets at an incredible rate of speed. The rockets aren't as powerful as the normal rockets but you can inundate your foe with these puppies. Idea from Weapons of Destruction mod. 3. Corkscrew - fires a 9 round burst of red stuff in a spiral pattern. Chaingun: 0. Normal Chaingun 1. Incendiary bullets - same damage as regular chaingun bullets but, like the incendairy super shotgun, may set your enemy aflame. From Napalm II mod. 2. Plasma - shoots electrified plasma balls that usually gib your victim; will electro-boil your enemy if he's in water up to his waist or higher (and you too if your in water). Adapted from Ikka K's Quake (I) Plasma gun, converted the Plasma ammo model. Grenades & Grenade Launcher: 0. Normal Quake II grenades 1. Flaming grenades - explosion plus flames From Napalm II mod. 2. Vortex Grenades - when fired, after the normal grenade delay time, opponents will be sucked towards the grenade for a number of seconds before it explodes; damage is somewhat less than a normal grenade but the vortex will slow your enemy down. Will lift enemies off the ground if the vortex is above them, sucks jetpackers down to earth. The vortex effect travels through walls, floors, etc. Adapted from Qdevels tutorial. 3. Cluster grenades - a grenade explosion triggers 4 subgrenades that shoot up and explode on impact. Modified from Qdevels tutorial. 4. Pipe bombs - drop them and run away; drop as many as you like and remotely detonate them all using the command detpipe (bind a key !). If you are killed before you detonate them they all detonate upon your death (sort of a self-service 21 gun salute). Bots do not use these. Adapted from Inside 3d tutorial 5. Field Effect Grenades - no explosion, but after a few seconds a green BFG cloud will appear and hover for about 10 seconds, electrifying anyone who comes in contact. Drop a few of these behind you while your running away to slow down your enemy. By the way, the area affected is NOT stopped by walls; drop one on one side and anyone near the other side will take damage. 6. Touch Grenades - no timer here, they explode as soon as they impact any surface (hopefully, that surface is your enemy). Damage and radius damage are increased from the original Id grenades. You will be forced to throw your touch grenade if you pressed the fire button and you haven't already thrown it and 3 seconds have elapsed. Inspired by the touch grenades in the Classic Quake Requiem Mod. Rocket Launcher: 0. Normal Quake II rockets - altered by the cvar pro_rocket; when pro_rocket is set to 1 rocket speed is increased to 1000 (from 650) and splash/radius damage is increased, making it more "Classic Quake"-ish. Adapted from the Pro-Rocket patch. 1. Flaming Rockets - explosion plus flames. From Napalm II mod. 2. Homing Rockets - locks on and persues your target; if your target evades the rocket, the rocket will attempt to acquire another target and persue it. Modified from Qdevels tutorial. 3. Triple Rockets - as you would expect, 3 rockets are fired simultaneously, 2 of them flying in a spiral around the first. Modified from the Inside3d tutorial by Tim Mathews. 3. Impact Rockets - very fast (1500) green glowing rockets filled with medical waste with virtually no radius splash damage. Almost like a direct hit weapon, you must hit your target to do any damage. Because of little radius damage you can use this at close range without danger of blowing yourself up. No explosion on impact, but if you're hit by one of these you'll likely disintegrate. Hyperblaster: 0. Normal Quake II hyperblaster. 1. Napalm Flame Thrower (and a beauty too) shoots clouds of flames, quickly engulfing your victim. From Napalm II mod. 2. Laser HyperBlaster - shoots a green laser beam that does the same damage as the normal blaster, except it instantaneously hits the opponent (normal blaster bolts travel at 600 units per second). From Qdevels tutorial. 3. Lightning - yeah, you know what it does. Shocks underwater victims (and underwater you). If your victim is on the ground the lightning bolt charge lifts him slightly. Modified from the Qdevels tutorial. Railgun: 0. Normal Quake II railgun. Damage inflicted by the stock id railgun is subject to location damage when location damage is turned on. 1. Meteor Storm - a flaming meteor is fired immediately flaming your victim if you hit him. Even if you don't, a fiery cloud of napalm rains down over the impact area for about 11 seconds, burning everyone who come in contact with the flames. You can only have 2 meteor storms active at once; starting a third extinguishes the first. From Napalm II mod. 2. Gib Flute - a thick continuous beam of sonic energy is cast at your enemy until you release the fire button. This does damage to everything in its path until it hits a wall or other solid. Normally randomly improvises a tune (music to die for/by), when you use the Quad or Invulnerablity you'll hear a recognizable tune. Converts slugs into sonic energy (...yeah, sure, whatever). Uses a configuarable amount of slugs for every 1/2 second of music. BFG10K: 0. Normal Quake II BFG10k. 1. Anti-Matter Cannon - a huge invisible energy blast instantaneously sears any enemies it hits. From Napalm II mod. 2. Neutron Cloud - slow moving black cloud that homes in and follows it's target, gibbing all life in its path. Will seek additional targets if it's original target dies or evades it. De-activates when the core (grenade size) of the cloud hits a wall or other solid body. If the core of the cloud passes through an open door or window it will continue on trying to acquire targets. 2.1.1.1.3 Max Ammo and Ammo at Startup -------------------------------------- The maximum ammo of each ammo type a player can have in his/her/it's inventory are is controlled by the following server cvars, shown with their default values: max_bullets 200 max_shells 100 max grenades 100 max_rockets 100 max_cells 200 max_slugs 50 The amount of ammo for each weapon in a player's inventory when he spawns and respawns can be set by the server operator using the following cvars, which all default to zero: start_shells start_bullets start_grenades start_rockets start_cells start_slugs Note these are 'latched' cvars which means that the change in value of the cvar will not occur until the level changes. 2.1.1.1.4 Misc. Ammo Options ---------------------------- Set these server cvars to 1 to enable, 0 to disable: laser_blasters - substitutes an instant hit green laser beam for the bolts from both the blaster and the hyperblaster. Only functions when the cvar weapons_mode is set to 0 (normal Q2 firemodes). bouncing_blaster_bolts - controls whether blaster and hyperblaster bolts bounce off walls or not. no_napalm - Only works when weapons_mode = 2 (Cost mode), no napalm fire mode is available for any weapon , but all other fire modes are available. Set the following server cvars to a number greater than 0: freeze_time - controls the number of seconds a player is frozen when hit by a freeze super shotgun blast; the default is 5 seconds. Unlike WOD, the time a player is frozen from multiple hits from the freeze supershotgun is *not* cumulative, ie. if freeze_time is 5 seconds and a player is hit 3 times by the freeze supershotgun he is *not* frozen for 15 seconds; instead he will remain frozen for 5 seconds after the last time he was hit. flame_time - controls the number of seconds a player stays on fire when ignited; the default is 6 seconds. 2.1.1.2 Weapons Control ----------------------- 2.1.1.2.1 Configuring Start Weapons ----------------------------------- The server operator can configure the weapon each player starts with upon spawning/respawning; all these cvars default to zero except start_bl which defaults to 1, and all are 'latched' cvars: start_bl - players start with the blaster (***) start_sg - players start with the shotgun start_ssg - players start with the super shotgun start_mg - players start with the machinegun start_cg - players start with the chaingun start_gl - players start with the grenade launcher start_rl - players start with the rocket launcher start_hb - players start with the hyperblaster start_rg - players start with the railgun start_bfg - players start with the bfg Of course the server operator should give the players some starting ammo if they give the players any starting weapon other than the blaster. (***) NOTE: if you set start_bl to 0 you should also ban the blaster; see 2.1.1.2.2 . 2.1.1.2.2 Banning Weapons ------------------------- The server operator can ban the use of any weapon by configuring the following cvars to 1 to enable or 0 to disable; all these cvars default to zero and all are 'latched' cvars. no_bl - bans the blaster no_sg - bans the shotgun no_ssg - bans the super shotgun no_mg - bans the machinegun no_cg - bans the chaingun no_gl - bans the grenade launcher no_rl - bans the rocket launcher no_hb - bans the hyperblaster no_rg - bans the railgun no_bfg - bans the bfg no_hg - bans hand grenades 2.1.1.2.3 Configuring 'Insta-Gib' servers ------------------------------------------ 'Insta-Gib' generally means you spawn/respawn into a level with weapons and ammo already in your inventory and don't have to run around looking for stuff to start fragging away. The server operator can configure an 'Insta-Gib' server by enabling some start weapons and giving the player some ammo. I recommend you set the 'bits' in the iD cvar dmflags that enable 'Infinite Ammo' (you add 8192 to whatever value you have dmflags set to). You can configure your 'Insta-Gib' server further by setting the weapons_mode cvar to whatever value you like so the extra fire modes for each weapon are available or not available, as well as banning weapons as you like. NOTE: If you set some of the start weapon cvars to enabled and give the players some starting ammo for each start weapon and set the 'Infinite Ammo' bits of the dmflags cvar then *no* weapons or ammo that the players start with will spawn onto the map; banning all other weapons will result in *no* weapons or ammo spawning on the level. I have yet to code a workaround so cells spawn onto the map when power armor is on the map ... A sample configuration for a 'rail-only' 'Insta-Gib' server: dmflags 8192 // (or any dmflags with 8192 enabled for Infinite Ammo) start_slugs 50 // give players some slugs at startup - when Infinite // ammo enabled they'll never deplete their inventory. start_rg 1 // players start with the railgun, nothing else start_bl 0 start_sg 0 start_ssg 0 start_mg 0 start_cg 0 start_gl 0 start_rl 0 start_hb 0 start_bfg 0 no_rg 0 // the railgun is *not* banned, all other weapons are; no_bl 1 no_sg 1 // no weapons or ammo will spawn on the level. no_ssg 1 no_mg 1 no_cg 1 no_gl 1 no_rl 1 no_hb 1 no_bfg 1 no_hg 1 weapons_mode 0 // only the normal Q2 railgun fire mode used Be aware the dmflags option for 'Infinite Ammo' (8192) *only* pertains to ammo for weapons; calling an airstrike, enabling a Monster Sidekick or using power armor will deplete the appropriate ammo from your inventory. 2.1.1.2.4 Misc. Weapon Options ------------------------------ 2.1.1.2.4.1 CTF Grapple As a Weapon ----------------------------------- sticky_grapple The CTF grapple has been sharpened to inflict more damage when it hits a damagable entity, the damage has been raised from 1 to 10. This mod allows the CTF grapple to stick to another player as opposed to the normal Q2 behavior which does not allow the grapple to stick to a player. The cvar sticky_grapple controls whether the CTF grapple sticks to players or not, set to 0 to disable sticking, the default value is 1. Note that all players have the grapple in their inventories at all times, even when the game is not Capture The Flag. Default Value: 1 2.1.1.3 Third Party Killers --------------------------- Third Party Killers are entities that do the killing for you and you get credit for the frag. The availablity of all Third Party Killers is controlled by individual cvars, set to 1 to enable, 0 to disable. 2.1.1.3.1 AirStrikes -------------------- air_strikes air_strike_cost air_strike_delay (0.14) If you've got enough rockets (cost is configurable), you can send a Strogg Viper over your enemy and it will rain rockets on them. You must be looking at an area with open skies above it when issuing an airstrike command. The airstrike will start directly above the spot you were looking at when you issued the airstrike command and will travel towards the position you initiated the airstrike from after a delay specified by the server cvar air_strike_delay. The cost of an airstrike (in rockets) is controlled by the server cvar air_strike_cost, which defaults to 60. The delay time in seconds between the initiation of an airstrike and it's launch is controlled by the server cvar air_strike_delay, which defaults to 5; the minimum delay possible is 1 second, values less than 1 default to 1 second delay. Invoking the airstrike command after an airstrike is been initiated and before the airstrike has started cancels the airstrike, returning the rockets used to "buy" an airstrike to your inventory. Getting fragged before your air strike begins cancels the air strike. The server cvar air_strikes must be set to 1 to enable air strikes. . Default Values: air_strikes 1, air_strike_cost 60, air_strike_delay 5 Console command: airstrike (bind a key). 2.1.1.3.2 Voodoo Homing Heads ----------------------------- cvar start_voodoo If you have the Voodoo tech or the cvar start_voodoo is set to 1 when a player or dead body is gibbed and a head is tossed from it's body you can it pick up by walking over it. You can toss a re-animated head in the air with the tosshead command (while you can pick up as many heads as you like, you can ONLY toss the last one you picked up; once tossed you must subsequently pick up another one before you can toss another head). The head will rise into the air and hover, waiting for another player to approach. When another player gets close enough the head will chase the player and shoot lightning bolts at them, exploding when it hits them; if the player dies from the lightning bolts or explosion the player who tossed the head gets credit for the frag. Tossed heads get confused if they bump into walls or lose sight of it's enemy and will careen around wildly. Occasionally, a tossed head will turn rogue (signified by a 'daffy' laugh) and possibly target the head's owner. A tossed head is re-animated for about 1 minute then explodes. To toss gibbed heads you must have the Voodoo tech in your inventory or the server cvar start_voodoo must be set to 1, which disables the spawning of the Voodoo tech. Default Value: 0 Console command: tosshead 2.1.1.3.3 Monster Sidekicks --------------------------- cvar monster_mode 1 If the server cvar monster_mode is set to 1 players can have a monster sidekick fight for them at the cost of some ammo. The monster will spawn about 150 units in front of the player and to his/her left or right; if their isn't room to spawn a monster at these locations an error message is issued and the monster won't spawn. The monster will fight against all players except it's creator and it's creator gets all the frags; monsters won't intentionally target their creator or other monsters. Sidekick monsters fight until they are fragged or their creator is fragged. You can have monster sidekicks when playing CTF; monsters will glow the color of their creator's team and will only attack players of their creator's enemy team, bots won't attack the monster sidekicks of players on their own team. See 2.2.5 Client Monster Sidekick Commands for more details on controlling monster sidekicks. Default Value: 0 2.1.1.3.3.1 Controlling Monster Sidekick Costs ---------------------------------------------- The amount of ammo required to "buy" a monster sidekick can be controlled by the following server cvars: soldier_cost qty of shells, default 75 infantry cost qty of bullets, default 150 gunner_cost qty of grenades, default 75 chick_cost qty of rockets, default 75 tank_cost qty of slugs, default 40 gladiator_cost qty of cells, default 150 Note you can effectively ban a particular monster sidekick from being used if you set it's cost prohibitably high, ie. 'tank_cost 9999' bans the tank because no one is able to get 9999 slugs without a lot of cheating. 2.1.2 Server Gameplay Options ----------------------- Various options that affect gameplay are set by server cvars. Change their values to suit you taste. 2.1.2.1 Respawn Protection --------------------------- cvar respawn_safety The cvar respawn_safety allows the server operator to set the number of seconds after a player spawns/respawns that he/she is invulnerable to damage; the player cannot shoot his weapon, off-hand hook or CTF grapple during this time. Set to zero to disable. Default Value: 3.0 2.1.2.2 Dropping Backpacks --------------------------- cvar drop_backpacks Setting the cvar drop_backpacks to 1 causes fragged players to drop a backpack full of their entire inventory of weapons and ammo in addition to dropping their current weapon; powerups, armor, the blaster, off-hand hook and CTF grapple are not dropped in the backpack. Setting drop_backpacks to 0 disables the dropping of backpacks. Default Value: 1 (on) 2.1.2.3 Ejecting Shotgun Shells -------------------------------- cvar eject_shells Spent shotgun shells are ejected from the shotgun and supershotgun when the cvar eject_shells is set to a value greater than zero; the value you set eject_shells to configures the number of seconds the spent shells will remain in the world until they disappear. Set eject_shells to zero to turn off ejecting spent shotgun shells. Default value: 10.0 2.1.2.4 Ejecting Bullet Casings -------------------------------- cvar eject_brass Spent bullet casings are ejected from the machinegun and chaingun when the cvar eject_brass is set to a value greater than zero; the value you set eject_brass to configures the number of seconds the spent bullet casings will remain in the world untiil they disappear. Set eject_brass to zero to turn off ejecting spent bullet casings. Bullet casings are not ejected when the machinegun or chaingun fires projectile ordinance. Default value: 6 NOTE: Ejecting spent bullet casings will cause lag when many players are playing on a non-dedicated server. Many clients emptying their chainguns at the same time with eject_brass set to a value greater than 0 will lag a slow server. 2.1.2.5 Feed The Mutant ------------------------ cvar feed_the_mutant When the cvar feed_the_mutant is set to a value greater than zero, bringing gibbed heads to a Mutant item (not a monster !) will give you bonus frags. The bonus frags accumulate "factorally"; 1 head = 1 frag, 2 heads = (1 + 2) = 3 frags, 3 heads = (1 + 2 + 3) = 6 frags, etc. You must use the server command spawnitem (see the instructions below at 2.1.3.3.1) to spawn a Mutant item or multiple Mutant items (the item spawned is an item_mutant, which is an animated mutant which doesn't attack anything). Setting feed_the_mutant to 1 enables head bonus scoring in addition to the scoring for frags and CTF (yes, you can combine the game modes); setting feed_the_mutant to 2 eliminates frags from scoring, you can only score points by bringing heads to a Mutant item (CTF scoring is still in effect, if applicable). Mutant items are saved to a disk file when the server command saveextras is run (see 2.1.3.3.2.1); saved Mutant items spawn on the map the next time the map is run on the server if the server cvar use_extra_item_files is set to 1 (see 2.1.3.3.2) and feed_the_mutant is set greater than 0. Default value: 0 2.1.2.6 Bots vs. Humans ------------------------ cvar bots_vs_humans Think you're pretty tough ? Set the cvar bots_vs_humans to 1 and all bots will ignore other bots and choose only human clients as enemies. Bots will not intentionally frag each other but may fire upon each other accidently when targeting a human. This is a free-for-all mode, there is no teamplay involved. Default Value: 0 2.1.2.7 Locational Damage -------------------------- location_damage Locational Damage means the damage a player incurs is increased or decreased depending on the accuracy of the shot. For example, if the player is hit in the arms or legs, the damage is scaled down; if the player is hit in the chest or head the damage is scaled up. When location damage is turned on the hud indicates what location your shot hit and the target player/bot you hit when using a location damage weapon. Location Damage is only implemented for weapons/fire modes that don't blow you up or bore a hole thru you; specifically, the following weapons/fire modes are affected when location_damage is set to 1: blaster - only the berreta does location damage railgun - only the normal railgun does location_damage All other weapon fire modes use regular damage scoring. Scaling of Damage: arm or leg shot - damage scaled DOWN to 66% of original damage (2/3 the damage) stomach shot - damage scaled DOWN to 80% of original damage (4/5 the damage) chest shot - damage scaled UP to 120% of original damage (1/5 extra damage) head shot - scaled up to 250% of original damage (can you say "gib" ?) (1.5x extra damage) Default Value: 0. 2.1.2.7.1 Locational Damage, Head Shots Only --------------------------------------------- When the location_damage cvar is set greater than 1, all locational damage to any portion of the body except the head is scaled DOWN to 0.001% of original damage (1/1000 the damage) and head shot damage scaled UP to 250% of original damage (1.5x extra damage), rendering any shot other than a head shot ineffective. 2.1.2.8 Announce Headshots -------------------------- cvar announce_headshots When the server cvar announce_headshots is set to 1 and location_damage is turned on whenever a head shot occurs all players are notified in a message of the shooter and the victim. Default Value: 0. 2.1.2.9 Turning Footsteps off/on --------------------------------- cvar no_footsteps The server operator can turn off the sounds made by all player's footsteps by setting the cvar no_footsteps to 1. Default value: 0 2.1.2.10 Haste For All Players ------------------------------ cvar start_haste All players can be given the effect of the Haste tech (weapon fire rate doubled) when the server operator sets the cvar start_haste to 1; this is a 'latched' cvar and won't take effect until the level changes. Players all have their weapon fire rate doubled automatically. When start_haste is set to 1 the Haste tech does not spawn. Default value: 0 2.1.2.11 Vampire For All Players -------------------------------- cvar start_vampire All players can be given the effect of the Vampire tech (damage dealt increases health) when the server operator sets the cvar start_vampire to 1; this is a 'latched' cvar and won't take effect until the level changes. When start_vampire is set to 1 the Vampire tech does not spawn. See 2.1.3.4 for info on the Vampire tech. Default value: 0 2.1.2.12 Max Health and Start Health ------------------------------------ cvar max_health cvar start_health All Players' maximum and start health points can be altered from the standard 100 points when the server operator sets the cvars max_health and start_health to some number greater than 0. These are 'latched' cvars and won't take effect until the level changes. Default values: 100 2.1.2.13 Start Armor -------------------- cvar start_armor Players can be given the appropriate armor at spawn/respawn when the server op sets the cvar start_armor to a value of "jacket", "combat" or "body". This is a 'latched' cvar and won't take effect until the level changes. Default value: 0 2.1.2.14 No Hook and/or No Grapple ---------------------------------- The off-hand hook and the ctf grapple is banned when the appropriate server cvar, no_hook or no_grapple, is set to 1. Default Value(s): 0 2.1.2.15 Default KillerCam ----------------------------- cvar default_killercam_on Clients using the chase cam can execute the "killercam" command (see 2.2.2.2.3) to toggle whether or not the cam switchs to chase the killer when the player they are chasing gets fragged. Setting the server cvar default_killercam_on to 1 causes "killercam" to be initially enabled when the when a client activates a chase cam; setting it to zero causes "killercam" to be initially disabled when the cam is activated. Default value: 1 2.1.2.16 Standard iD Options ---------------------------- Some important iD standard server cvars you should know: dmflags Sets a multitude of options. You add the numbers of the options you want enabled and set dmflags equal to the sum. Here are the options and their numbers, I assume you know what they mean: DF_NO_HEALTH 1 DF_NO_ITEMS 2 DF_WEAPONS_STAY 4 DF_NO_FALLING 8 DF_INSTANT_ITEMS 16 DF_SAME_LEVEL 32 DF_SKINTEAMS 64 DF_MODELTEAMS 128 DF_NO_FRIENDLY_FIRE 256 DF_SPAWN_FARTHEST 512 DF_FORCE_RESPAWN 1024 DF_NO_ARMOR 2048 DF_ALLOW_EXIT 4096 DF_INFINITE_AMMO 8192 DF_QUAD_DROP 16384 DF_FIXED_FOV 32768 DF_CTF_FORCEJOIN 131072 DF_ARMOR_PROTECT 262144 DF_CTF_NO_TECH 524288 To enable weapons stay, instant items and disable CTF techs (and lOkO techs too): 4 + 16 + 524288 = 524306 For CTF, to enable spawn farthest and allow damage from teammates: 512 + 256 = 768 The default lOkO dmflags: 16 (instant items enabled) deathmatch Always set this to 1; single player against monsters is not supported. ctf Setting ctf to 1 sets the game to Capture The Flag; in the absense of flags on the map teamplay is enabled. Note: the hud will go wacky when you change the value of the ctf cvar in the middle of a game; you should type "disconnect", change the ctf cvar and re-start the game with the map command. timelimit sets the duration of the game in minutes .ie "timelimit 20" ends the game after 20 minutes has elapsed; "timelimit 0" eliminates the time limit on the game. fraglimit the game ends when any player's score is equal to or greater than the value of the fraglimit cvar .ie "fraglimit 20" ends the game when any player score reaches 20. "fraglimit 0" removes any frag limit. capturelimit the game ends when one team has captured their enemy's flag the number of times specified by the capturelimit cvar .ie "capturelimit 5" ends the game when either team captures their enemy's flag 5 times. "capturelimit 0" removes any capture limit. Note that the fraglimit cvar must be set to a value greater than 0 for capturelimit to be enforced. maxclients the number of clients (bots and humans) the server will accept connections from; this must be set higher than the number of bots/humans you wish to play against. Some important iD commands you should know: map starts a new game and changes the map to .ie "map q2ctf3" disconnect when run from the server it shuts the server down, leaving you at a console prompt. Use the map command to restart the server. dir functions like the DOS dir command. 2.1.2.17 Playing Tag -------------------- cvar game_tag The Tag tech uses the model for the Invulnerability powerup with a white glow. The player who picks up the Tag tech becomes "it" and gets 666 health, all weapons, all ammo limits raised by 50 units and a full inventory of each ammo. Players who are "it" get 5 frag points for each frag. Fragging the player who is "it" gets you 20 frag points. Suiciding when "it" costs you 20 frag points. To play a game of Tag you must set the server cvar game_tag to 1 or 2 before the level loads; when set to 1 no other techs spawn, setting to 2 enables all unbanned techs to spawn. Players don't drop backpacks when playing Tag even when the drop_backpacks server cvar is set to 1. Default Value: 0 2.1.2.18 Action Quake2 Doors ---------------------------- cvar aq2_doors The behavior of doors can be altered to function like doors do in the Action Quake2 mod; when the server cvar aq2_doors is set to 1 clients must issue the command "opendoor" before the door opens. Note that bots won't know to issue the opendoor commands unless a DOOR_OPEN node is placed for the door; currently only maps designed specifically for Action Quake2 have DOOR_OPEN nodes placed and that is not likely to change. Bind a key, ie. bind o 'opendoor' Default Value: 0 2.1.2.19 Deathmatch Monsters ---------------------------- cvar monster_mode The availability of monsters in deathmatch is controlled by the monster_mode server cvar. Here are the possible values and their meanings: monster_mode 0 No deathmatch monsters available (the default) monster_mode 1 monster sidekicks are available for players (see 2.1.1.3.3). monster_mode 2 server spawned monsters fight for a team; they can be killed but respawn in 30 seconds (see 2.1.2.19.2). monster_mode 3 server spawned monsters can be killed but respawn in 20 seconds; players fragged by a server spawned monster lose a frag (see 2.1.2.19.1). monster_mode 4 server spawned monsters react to damage but can't be killed; players fragged by a server spawned monster lose a frag (see 2.1.2.19.1). ******************************************************************************* It is strongly recommended to set the server cvar no_target_speaker to 1 when deathmatch monsters are being used to prevent "sound index overflow" when the maximum amount of sounds Quake II can load is exceeded (see 2.1.3.8). ******************************************************************************* Note that each different monster model loaded comes with it's own unique sounds; the sidekick monster models all have a few sounds eliminated from use for deathmatch to reduce the number of sounds in the game but most other monsters will use there full compliment of sounds. Using many different monster models will overflow the sound index. Deathmatch monsters only attack players and bots, never other monsters. If the skill server cvar is set to 3 monsters don't run any pain animations. Default Value: 0 2.1.2.19.1 Server Spawned Monsters ---------------------------------- When the server cvar monster_mode is set to 3 or 4 the server operator can spawn deathmatch monsters using the spawnitem server command; see 2.1.3.3.1 and 2.1.3.3.2. Note that monsters native to a single player map do NOT spawn when the map is loaded. When monster_mode is set to 3 monsters respawn where they were killed. When monster_mode is set to 4 monsters react to damage but cannot be killed. If a server spawned monster touchs a trigger_hurt it will teleport to it's initial spawn location. Players fragged by a server spawned monster lose a frag. Deathmatch monsters cannot be gibbed. The classnames of the server spawnable monsters: monster_soldier monster_infantry monster_mutant monster_gladiator monster_gunner monster_parasite monster_makron monster_chick monster_tank monster_supertank monster_flipper monster_flyer monster_floater monster_hover monster_boss2 monster_jorg You can save the server spawned monsters you have added to a map to a disk file using the server command savemonsters (see 2.1.2.19.1.1); the next time the map is loaded and monster_mode is set to 3 or 4 any monsters saved to a disk file are spawned onto the map. You can also manually create a text file with a text editor specifying the classnames and positions of server spawned monsters, see 2.1.2.19.1.3. All the Fragtown maps have server spawned monsters defined in monster files that will automatically load when use_monster_files is set greater than 0 and monster_mode is set to 3 or 4. 2.1.2.19.1.1 The savemonsters server command ----------------------------------------------- The server operator can save the added server monsters to a disk file using the sv savemonsters command. Saved monsters are automatically loaded onto the map at startup when the server cvar use_monster_file is set to 1 and the server cvar monster_mode is set to 2. Monsters are saved to a file where the basename is the map name and the extension is ".mon", ie "q2dm1.mon"; the file is saved in the "items" directory off the game directory. Team monsters invoked with the server command ctfmonster are *not* saved to the monster file created by the savemonsters command, see 2.1.2.19.2.2 for the savectfmonsters server command. 2.1.2.19.1.2 The use_monster_file server cvar ------------------------------------------------- cvar cvar use_monster_file When the server cvar use_monster_file is set to 1 any server monsters saved to disk for a map will respawn when the map is loaded. This is a latched' cvar and any change to it won't take effect until the level changes. A number of monster files are included in the zip archive. Default value: 1 2.1.2.19.1.3 Using a Text Editor to Create/Edit a Monster File ------------------------------------------------------------------ You can create or edit monster files off line with a text editor. The file should be saved in the "items" directory off the game directory. The basename is the map name and the extension is ".mon", ie. the file name for map q2dm1 is q2dm1.mon. Lines beginning with a '#' are comments. The format for each line in the file is: x y z classname where x y and z are the spawn coordinates for the monster and classname is a monster classname as specified in 2.1.2.19.1. Here is the contents of an example monster file that spawns a jorg, a tank and a boss2 on map q2dm1: ### monster file: .\loko\items\q2dm1.mon 1189 680 600 monster_jorg 857 1404 876 monster_tank 93 664 920 monster_boss2 2.1.2.19.2 Capture the Flag Team Monsters ----------------------------------------- When the server cvar monster_mode is set to 2 the server operator can spawn monsters that work on behalf of each of the capture the flag/teamplay teams. CTF monsters can be killed; they respawn at their original spawn position after 30 seconds. If a server spawned monster touchs a trigger_hurt it will teleport to it's initial spawn location. Again, deathmatch monsters cannot be gibbed. 2.1.2.19.2.1 The ctfmonster server command ------------------------------------------- The server operator can add the team monsters "on the fly" in the console using the sv ctfmonster command. The syntax: sv ctfmonster classname x y z team where classname is a monster classname as specified in 2.1.2.19.1, x y and z are the integer spawn coordinates for the monster and team is red or blue. The viewpos command will show the coordinates you are at, see 2.2.6.1.1 Example: sv ctfmonster monster_tank 200 -332 60 red spawns a tank monster for the red team at the specified coordinates. 2.1.2.19.2.2 The savectfmonsters server command ----------------------------------------------- The server operator can save the added ctf monsters to a disk file using the sv savectfmonsters command. Saved ctf monsters are automatically loaded onto the map at startup when the server cvar use_ctf_monster_file is set to 1, the server cvar ctf is set to 1 and the server cvar monster_mode is set to 2. CTF monsters are saved to a file where the basename is the map name and the extension is ".tmo", ie "q2ctf5.tmo"; the file is saved in the "items" directory off the game directory. 2.1.2.19.2.3 The use_ctf_monster_file server cvar ------------------------------------------------- cvar cvar use_ctf_monster_file When the server cvar use_ctf_monster_file is set to 1 any ctf monsters saved to disk will respawn when the map is loaded. This is a latched' cvar and any change to it won't take effect until the level changes. A number of team monster files are included in the zip archive. Default value: 1 2.1.2.19.2.4 Using a Text Editor to Create/Edit a CTF Monster File ------------------------------------------------------------------ You can create or edit CTF monster files off line with a text editor. The file should be saved in the "items" directory off the game directory. The basename is the map name and the extension is ".tmo", ie. the file name for map q2ctf2 is q2ctf2.tmo. Lines beginning with a '#' are comments. The format for each line in the file is: x y z classname team where x y and z are the integer spawn coordinates for the monster, classname is a monster classname as specified in 2.1.2.19.1 and team is "red" or "blue". Here is the contents of an example CTF monster file that spawns a mutant and a chick for each team: ### team monster file: .\loko\items\q2ctf2.tmo -2019 1294 250 monster_mutant blue -2661 1569 540 monster_chick blue 2188 -896 540 monster_chick red 1582 -770 230 monster_mutant red 2.1.2.19.3 The removemonsters server command -------------------------------------------- The server operator can remove all server spawned monsters from a map with the server command removemonsters, ie. sv removemonsters. 2.1.2.19.4 The monster_kill_bonus server cvar --------------------------------------------- The server operator can set the scoring bonus given to a player/bot when he kills a server monster with the monster_kill_bonus server cvar. The value of the cvar is added to a player's score. The scoring only applies when monster_mode is set to 2 (ctf team monsters) or 3 (mortal monsters) and not monster sidekicks. default value: 2 2.1.3 Misc. Server Options --------------------------- 2.1.3.1 OpenGL Fog Options --------------------------- Fog can be displayed on levels when an OpenGL 1.1 compliant video card is present. Fog is a *server* option, if the client's machine in incapable of running fog due to hardware/software deficiencies then obviously fog won't be rendered on the client's display. Fog is controlled by a series of cvars; if the cvar values are changed it is necessary to run the server command "resetfog" before the displayed fog is affected by the value of the cvars (ie. sv resetfog). ***NOTE: Voodoo Graphics cards that use the Voodoo minigl installation (like the Voodoo 2) can show fog, but you *must* do the following (you may want to backup any video dlls in your Quake2 directory before you start): a. Download the current Voodoo minigl drivers for your card. b. Install the CLASSIC QUAKE (quake 1 !!!) drivers either in your quake 1 directory or a dummy directory you set up. c. Copy the opengl.dll file from the quake 1 directory into your quake2 directory (NOT the mod directory !!) ie. c:\quake2. d. Start a SINGLE player quake2 game, go to the video options and choose the default OpenGL drivers NOT the voodoo drivers !). e. Close Quake2 and start your mod, go to the video options and choose the default OpenGL drivers (NOT the voodoo drivers!). I've heard you can alternately install the GLIDE or MESA OpenGL drivers for Voodoo Graphics cards but I've never tested this. Fog is a feature mainly for use by a player playing against bots on a non-dedicated server on his/her own machine. If the server is on a lan then of course each machine connecting to the server must be running using OpenGl video drivers in order to see fog; since the server doesn't know if a client's hardware/software is configured to enable visible OpenGL fog, players playing without fog on a server running with fog enabled have an obvious advantage. I've learned from experiments on my own home lan that a properly configured client will display fog when connected to a server with fog if fog is enabled before a map is loaded; fog will disappear from client machines whenever the resetfog command is run on the server. 2.1.3.1.1 Fog Options Cvars and Commands ----------------------------------------- The following server cvars control the display of fog: show_fog - set to 1 to display fog, 0 for no displayed fog. fog_type - sets the way the distances for fog clipping are calculated; the possible choices are: 0 linear (the default) 1 exponential 2 exponential2 fog_density - sets the fog density when fog_type is not 0 (linear); the value is a floating point number (decimal) between 0 and 1. fog_farclip - when fog_type is 0 (linear) sets the distance that can be seen before fog completely obscures the view. Minimum value : 0 , Maximum Value : 8192. fog_nearclip - when fog_type is 0 (linear) sets the distance away from a player fog begins to be rendered. Minimum value : 0 , Maximum Value : 8192. fog_red - sets the amount of red shown in the fog; value is a floating point number (decimal) between 0 and 1. fog_green - sets the amount of green shown in the fog; value is a floating point number (decimal) between 0 and 1. fog_blue - sets the amount of blue shown in the fog; value is a floating point number (decimal) between 0 and 1. The color of the displayed fog depends on the values of cvars fog_red, fog_blue and fog_green. If you want to display a reddish fog set the fog_red cvar's value higher than the value of fog_green and fog_blue. For a dark grey fog set fog_red, fog_blue and fog_green to 0.2; for a brighter, whiter fog set all three to 0.75. Again, the fog displayed will not reflect the value of any changed cvar until the "sv resetfog" server command is run. The client command fogdistance tells you the visibility distance thru the fog and places a green sphere directly in front of you at a distance of the limit of visibility. 2.1.3.1.2 Fog Options File --------------------------- cvar use_fog_file If you want to configure your server to always display fog a certain way on a certain level you can specify the fog settings for the level in a "fog" file which resides in the "fog" directory off the "game" directory (the directory where the mod's dll resides). Each level get it's own fog file named like: .fog ie. q2dm1.fog Specify the fog cvars described in 2.1.3.1.1 and the desired values in the file, one to a line. Do *not* use the "set" keyword !! Here's the contents of a sample map specific fog file: ## deepfrz.fog - shows a bright white fog fog_red 0.8 fog_green 0.8 fog_blue 0.82 fog_density 0.0014 fog_type 2 show_fog 1 The server cvar use_fog_file controls the use of fog files, setting to 1 enables the use of fog files, setting to 0 disables the loading of fog parameters. Default value: 1. 2.1.3.1.3 Default Fog Options File ----------------------------------- If no map specific fog options file exists for the map loaded then the game dll searches for a file named "defaultfog.fog" in the "fog" directory off the "game" directory (the directory where the mod's dll resides). Specify the default fog settings desired for any map that does not have a fog file for it in defaultfog.fog in the same manner as specified in 2.1.3.1.2. Some sample contents for the defaultfog.fog file: ## defaultfog.fog ## show a dark fog ... fog_red 0.15 fog_blue 0.15 fog_green 0.15 fog_farclip 1100 fog_nearclip 5 fog_type 0 show_fog 1 Another version: ## defaultfog.fog ## default to showing NO fog... show_fog 0 Note the use of the default fog file is controlled by the server cvar use_fog_file as explained in 2.1.3.1.2 . 2.1.3.2 Map Rotation --------------------- This mod supports the standard iD map rotation as specified by the iD cvar sv_maplist (in the future I may implement a more robust map rotation with random map switching and voting). You must have a frag limit, time limit or capture limit set for map rotation to function. You specify the map rotation as a series of mapnames seperated by commas or white space (blanks). Two examples: set sv_maplist q2dm1 q2dm2 q2dm3 q2dm4 q2dm5 q2dm6 q2dm7 set sv_maplist broken1,broken2,broken3,fixed1 In order for map rotation to work you must be running one of the maps specified in the list of maps; if you run a map not in the list map rotation will not occur. Another example: In your autoexec.cfg file put the following lines: set timelimit 20 set fraglimit 60 set sv_maplist q2dm1 q2dm2 q2dm3 q2dm4 q2dm5 q2dm6 q2dm7 Now start the server with '+map q2dm6' on the command line; the server will start with q2dm6 as the level, when the timelimit or fraglimit is reached the next map the server will run q2dm7, then q2dm1, etc. 2.1.3.3 Adding Items/Monsters to Maps -------------------------------------- The server operator can add extra weapons, ammo, powerups, health, CTF flags, spawn points, armor to any level without editing the bsp file for the level. The commands that add extra items to levels can be entered at the console after the level is loaded or specified in a level-specific file that is loaded each time the level is run. The spawned item will act like any map item of that type ie. you can pick it up and it will respawn (except for the Mutant item). All items are spawned using the iD function droptofloor(), (player spawn points, info_player_deathmatch and info_player_teamX are automatically lowered to the floor too) so the z coordinate should be at least 50 units above the floor. The following list contains all valid item classnames you may spawn in the level (you may *not* spawn extra ctf techs, grappling hooks, blasters ...): item_health weapon_shotgun item_health_small weapon_supershotgun item_health_medium weapon_machinegun item_health_large weapon_chaingun item_health_mega weapon_grenadelauncher item_adrenaline weapon_rocketlauncher item_bandolier weapon_hyperblaster item_power_shield weapon_railgun item_power_screen weapon_bfg10k item_armor_jacket ammo_shells item_armor_body ammo_bullets item_armor_combat ammo_grenades item_armor_shard ammo_rockets item_pack ammo_cells item_ancient_head ammo_slugs item_flag_team1 (red flag) item_flag_team2 (blue flag) item_quad item_invulnerability item_silencer item_breather item_enviro item_invisible **(ring of shadows) item_mutant ** (mutant to feed heads to) info_player_deathmatch (deathmatch spawn point) info_player_team1 (ctf red team spawn point) info_player_team2 (ctf blue team spawn point) ** = lOkO items The maximum number of extra items you can add to a map is 256. Be aware that extra items placed on a map can increase r_speeds and slow the game down. Placing items at points not visible to many points on the map will minimize the impact on r_speeds. Many items in a small enclosed area is ok, many items in a large open space will increase r_speeds. Try to place extra items behind walls or crates or behind any map object that will block the view to the item from many points on the map. Bots are aware of the extra items placed on the map and will navigate to them as long as the item is placed near an existing navigation node that a path can be calculated to. In fact, it's best for bots if you place extra items at the exact location of an existing node. Additionally, when the server cvar monster_mode is set to 3 or 4 you can add monsters to a map in the same manner as adding an item; here the monster classnames you can add: monster_soldier monster_infantry monster_gladiator monster_mutant monster_gunner monster_parasite monster_makron monster_brain monster_chick monster_berserk monster_tank monster_supertank monster_flipper monster_flyer monster_floater monster_hover monster_boss2 monster_jorg See 2.1.2.19.1 for more info on server spawned monsters. It is strongly recommended to set the server cvar no_target_speaker to 1 when deathmatch monsters are being used to prevent "sound index overflow" when the maximum amount of sounds Quake II can load is exceeded (see 2.1.3.8). 2.1.3.3.1 Manually Adding Items/Monsters to Maps (console) ----------------------------------------------------------- sv spawnitem To manually add items/monsters to a map at the console you issue the server command spawnitem followed by the Q2 classname of the item and the x, y and z coordinates of the location you want the item placed. If the map has been "routed" with navigation nodes the bots would be pleased if extra items are placed at the exact position of an existing navigation node. Use the findnode command to find the closest node within 128 units; a colored sphere will appear at the node location and the console will display some info about the node like: node 232 type 0 <320.000 -1280.000 124.125> The numbers between the brackets (<>) are the x, y and z coordinates of the node location. If you wanted to place an extra item at those coordinates, round each number to a whole number and raise the z coordinate 30 units. See 2.3.1.5.5.1.1 for more info on the findnode command. Alternately, the iD command viewpos will tell you what world coordinates your player model's "eyes" are viewing the world from. Stand at the position you want to place an item at and run the viewpos command; you'll see some console text like: < 100 119 57 > : 91 The three numbers within the brackets (<>) are the x, y and z coordinates you are "seeing" the Q2 world from. If you wanted to place an extra item at those coordinates raise the z coordinate 10 units. See 2.2.6.1.1 for more info on the viewpos command. For example, to add a quad damage to the map at a certain location, navigate to the location and use the findnode or viewpos command to get the location's coordinates, say the findnode command reported the location: <-12.000 180.375 24.125> If you're not in spectator mode or noclip mode then step a few paces away from from that spot. Run the following command (you *must* be the server operator and the numbers must be whole numbers (integers)): sv spawnitem item_quad -12 180 54 This will spawn a quad damage powerup at the location you specified. The item will function just like any other map item, it will respawn a little while after it has been picked up. Note that I added about 30 units to the z coordinate; the iD droptofloor() function is executed for each item you specify, there must be room for the item to drop to the floor. Player spawn points (info_player_deathmatch,info_player_team1 and info_player_team2) are automatically dropped to floor level. There must be enough room to spawn a server monster, at least 128 units of vertical space at the specified location. Again, determine the position with the findnode or viewpos command, the z coordinate must be at least 50 units above the floor; example: sv spawn monster_jorg 344 -157 -224 The server cvar monster_mode must be set to 3 or 4 to spawn server monsters. 2.1.3.3.2 Extra Map Item Files ------------------------------- use_extra_item_files If you want to play a level and always spawn the same extra items on the level you can specify the items in a level-specific item file that will load each time you run the level. The files must be placed in a directory named items off the game directory (the directory with the lOkO dll) and be named like: .xif where is the name of the map, ie. q2dm1.xif. Each line of the file specifies one item, the format of the line is: x y z itemclassnamename where x, y and z are whole numbers specifying the x, y and z coordinates where you want the item placed and itemclassnamename is the class name of an item as specified in 2.1.3.3. See the example xif files in the ditribution zip file. NOTE: the cvar use_extra_item_files must be set to 1 to enable loading extra item files, set to 0 to disable (defaults to 1). Be aware when you use an extra item file to load extra items on a map which has never had a navigation node file saved to disk, the extra items appear in the item table built by the dll when it builds the initial node table for the map. If you subsequently route the map and save the node table to disk the extra items will always appear in the item table for the map any time the map is run, even if you have the server cvar use_extra_item_files set to 0 and those extra items are not spawned on the map; bots won't know the extra items are not on the map and will navigate to the locations of the extra items when they desire the item. It is recommended that you NOT store team flags in extra item files, see 2.1.3.3.4 CTF Flag Position File for storing team flag positions. Default value: 1 2.1.3.3.2.1 Saving Extra Items to Disk ----------------------------------------------- You can save the extra items you manually place on a map with the server command saveextras, ie. sv saveextras. The file will load the items the next time the map is loaded if the server cvar use_extra_item_file is set to 1. Team flags are NOT saved to the file; see 2.1.3.3.4 CTF Flag Position File to manually record the flag positions. Monsters are also not saved to the file; see the server command savemonsters 2.1.2.19.1.1 to save server monsters to disk; see the server command savectfmonsters 2.1.2.19.2.2 to save team monsters to disk. The extra item file (.xif) will be named and saved as specified in 2.1.3.3.2 . 2.1.3.3.3 Spawning Random Health --------------------------------- cvar random_health Some levels contain no health items, like Action Quake 2 levels. Setting the server cvar random_health to 1 before the level loads will cause a random health item to be spawned near most deathmatch spawn points. The health item spawned will be either a large health or, less frequently, a mega health. Random health items spawned on the map are counted as extra items, the maximum number of extra items that can be placed on a map is 256. Be aware when you use random_health to spawn health items on a map which has never had a navigation node file saved to disk, the health items appear in the item table built by the dll when it builds the initial node table for the map. If you subsequently route the map and save the node table to disk the health items spawned due to random_health being set to 1 will always appear in the item table for the map any time the map is run, even if you have the server cvar random_health is set to 0 and those random health items are not spawned on the map; bots won't know the random health items are not on the map and will navigate to their supposed locations when they desire the health. This is a 'latched' cvar and won't take effect until the level changes. default value: 0 2.1.3.3.4 CTF Flag Position File --------------------------------- cvar use_flag_positions_file The lOkObOt can play Capture The Flag on any level, even "non-ctf" levels (single player and deathmatch maps). If you want CTF flags to automatically spawn when playing CTF on non-ctf levels you can enter the flag positions in a file that will be loaded each time the level loads and the game is set to CTF. One file, named flag_positions.txt and located in the items directory off the game directory, specifies all the flag positions for every map. Each line of the file should be on the following format: mapname x y z x y z where mapname is the name of the map and each set of x y z represents the whole number x, y and z coordinates where you want the flags placed. Some examples: mine2 200 100 -76 1200 1800 65 mine3 1298 199 -382 -1100 1900 80 The z coordinate of each flag should place the flag 50 or so units above ground because the iD function drop_to_floor is used when spawning the flag; the function checks if there is enough room to drop the flag at the location before spawning a flag. The cvar use_flag_positions_file must be set to a value greater than zero to enable the use of the flag position file; setting use_flag_positions_file to 1 will place the red flag at the first set of coordinates specified and the blue flag at the other coordinates, setting use_flag_positions_file to 2 will place the blue flag at the first set of coordinates specified and the red flag at the other coordinates, setting use_flag_positions_file to 3 will randomly choose a flag to place at the first set of coordinates and place the other flag at the other coordinates. The viewpos command will show the coordinates you are at, see 2.2.6.1.1 Default value: 1 2.1.3.4 Additional Techs ------------------------- Five additional CTF techs are available with this mod: Vampire Tech: Picking up this tech immediately increases your max health by 25. Your health increases by 1/3 the damage you actually dole out to your client opponents, exclusive of damage absorbed by armor or power armor. The vampire does not work against monsters. The data cube model and pickup icon are used for the Vampire tech. Jet Pack tech: When you pick up the Jet Pack tech you can use the Jet Pack to fly. The Jet Pack uses no ammo. The command "+jetpack" turns the Jet Pack on/off. The pickup model for the Jet Pack tech is the Hover monster model, the pickup icon is the pyramid key icon. The Jet Pack Tech is not spawned on the map when the server operator sets the start_jetpack cvar to 1 in which case all players will have the jetpack. See section 2.2.6.2.1 below for usage of the +jetpack command. Ammo Regen: Picking up this tech causes any ammo in your inventory to slowly increase to maximum capacity. The data spinner model is used as a pickup model and the data spinner icon is used as a pickup icon. Lightning Defense: A bolt of lightning discharges from your eyes to the closest enemy within 300 units every 1/2 second. Automatically turns off when you are submerged in water. The blue key model and pickup icon are used as the pickup model and icon. Voodoo: Picking up the Voodoo tech enables you to "re-animate" gibbed heads you pickup. You can only toss the last head you picked up, even if you have more gibbed heads in your inventory; when you toss the last head you picked up you must subsequently pick up another in order to toss another. You toss the head using the tosshead command. The commander's head model and pickup icon are used as the pickup model and icon for the Voodoo tech. See 2.1.1.3.2 Homing Heads above for the behavior of re-animated heads. Five server cvars control the spawning of the additional techs: no_vampire_tech no_jetpack_tech no_ammo_regen_tech no_lightning_defense_tech no_voodoo_tech The values of the above cvars default to 0, meaning by default the additional techs spawn; set the appropriate cvars to 1 to disable them. These five techs are also disabled when the server cvar dmflags' bits are set with DF_CTF_NO_TECH enabled (524288). Note that when playing a game of tag the server might not spawn any techs except the "tag" tech; see 2.1.2.16 Playing Tag for the full explanation. 2.1.3.5 Additional Powerups ---------------------------- An additional powerup is available with this mod, the Ring of Shadows, like the Classic Quake powerup. When you pick up the Ring of Shadows you get 30 seconds of virtually total invisibility; every two seconds a few bubbles show up at your position. The server operator must add the Ring of Shadows powerup to the map (classname is item_invisible) either from the console as specified in 2.1.3.3.1 or in an extra item file as specified 2.1.3.3.2. The Ring of Shadows respawns 2 minutes after it is picked up. When using the ycam (3rd person perspective) while invisible you see the "eyes" model instead of your player's model and weapon model. 2.1.3.6 MegaHealth Bug/Feature ------------------------------- cvar max_mega_health My working copy of the Ace Bot source code had a strange bug: if a player's health was 150 or higher when the player touched the Mega Health his health would increase infinitely for as long as he touched the Mega Health. Needless to say the bots really liked this and would merrily hump the Mega Health for hours. I almost eliminated this bug but decided I rather liked the extra bonus to a degree. The server cvar max_mega_health controls the maximum health the Mega Health will dole out to a player with health 150 or higher. The default value is 999; setting max_mega_health to 250 essentially makes the Mega Health behave like bug-free vanilla Q2. Default value: 999 2.1.3.7 game_engine Server Cvar for Quake2 Engine Mod Compatability -------------------------------------------------------------------- cvar game_engine The lOkO mod is designed to work with the quake2.exe (the "engine") supplied with the commercial version of Quake2 3.20. Since the good folks at iD have released the engine source to the public some savy programmers have altered the source code and released alternative Q2 engines. Since everyone is free to alter the code at will, some code in the dll supplied with the lOkO mod may be incompatable with some of the new engines. When I can, I will try to alter the dll code to work with alternate game engines. The server cvar game_engine was added to so the server operator can tell the dll what engine is running. As of lOkO version 0.13, the possible values are: 0 stock iD game executable or compatable custom engine 1 (not used yet ...) 2 Quake2 Evolved version .23 3 Quake2 Evolved version .26b Detailed compatabilty with tested engines: Egl (Echon): no incompatability, no crashes. Highly recommended for 100% compatabilty, shader support, etc. Alas, dll fog does not seem to work... Tested with version 1.3, 1.4 and 1.5. Quake2 Max: no compatablity issues, no crashes; some effects look different from standard Q2, like the jetpack trail and the vortex grenade effect. As of version dll 0.13, you can leave game_engine set to 0 when using Quake2 Max as there is no engine specific code in the lOkO dll for Max. Tested with version 0.42, 0.44 and some earlier versions. Quake2 Evolved: you must set game_engine to 2 for the .23 engine or else the lOKO dll will crash; specifically it crashes when using any alternate firemode that has flaming ordinance. Set game_engine to 3 when using the .26b engine so the radar scanner displays correctly. Set game_engine to 0 for versions greater than 0.26b. Tested with version 0.23., 0.26b., 0.40 KMQuake: the lOkO dll doesn't work with this engine; you must use one of the dlls supplied with this engine. BeefQuake: no incompatability, no crashes. Tested with version 0.3. Default value: 0 2.1.3.8 no_target_speaker Server Cvar ------------------------------------ no_target_speaker The server cvar no_target_speaker controls the ambient sounds native to the map being played. When set to 1 map sounds played by the target_speaker entity on maps (ambient lava sizzle, dripping water, clanking machinery, etc.) are not loaded or played. It is strongly recommended to set no_target_speaker to 1 when deathmatch monsters are being used to prevent "sound index overflow" when the maximum amount of sounds Quake II can load is exceeded. Default Value: 0 2.1.3.9 save_scores Server Cvar -------------------------------- If the server cvar save_scores is set to 1, when the the map is changed with the id map command, the timelimit, fraglimit or capturelimit is hit or you exit the game on a non-dedicated local server the final scores and player statistics are saved to a text file in the 'scores' directory off the game directory on the server. Statistics reported are combat time, score, # of frags, # times fragged, # of suicides, # of heads fed to Mutants, damage doled out, damage taken, longest uninterupted frag streak, # of monsters killed, # times killed by monsters and # of monster sidekick kills credited. If the game is CTF then the team statistics # of flag captures, total points and # of players are reported as well as each player's team and CTF bonus points. The file in the 'scores' directory is named with the match end date (year, month, day) and time ( hours (0-24), minutes, seconds) and the level name ie. if the match on level q2dm1 ends at 35 seconds past 11:30 PM on Febuary 13th 2004 the filename would be 20040213233035q2dm1.txt . The scores won't be saved to disk if you kill the game with the 'disconnect' command on a non-dedicated local server. Default Value: 0 2.1.3.10 Playing Action Quake2 Maps ------------------------------------ The Action Quake2 mod has different weapons, ammo and other game items than the normal Q2 dll but keeps all the standard id item classnames for the mod's game items on it's maps; this way map designers can use any map editor the supports quake2 to make AQ2 maps. For example the AQ2 dll spawns a hand cannon when a weapon_rocketlauncher is specified, a pistol instead of a blaster, a sniper rifle instead of a bfg, etc. The lOkO mod spawns the normal Q2 weapons when playing on AQ2 maps and the weapons "mix" is usually kinda wierd; the weapons usually found on AQ2 maps are mostly shotguns, machineguns, rocket launchers and bfgs, sometimes railguns and chainguns, rarely hyperblasters, even more rarely grenade launchers and I've never seen a super shotgun. Generally AQ2 maps are sparsely populated with game items. The AQ2 mod doesn't spawn any health or armor on maps so maps made for the mod generally have none. Most doors won't open until the player issues the opendoor command. There are no powerups native to normal Q2 spawned nor any normal Q2 armor. The lOkO mod has a number of options for playing AQ2 maps: a. the server cvar aq2_doors can be set to 1 to emulate AQ2 door behavior, meaning most doors must be opened (and sometimes closed) using the opendoor command; all AQ2 maps with bot support have DOOR_OPEN nodes so bots know when to issue the opendoor command and wait for a door to open in order to navigate through it. b. most AQ2 maps with bot support also have extra item files supplied in the zip archive that will automatically spawn addtional weapons and ammo to "smooth" the weapons "mix", ie. weapons rarely found on AQ2 maps are added along with more ammo, powerups and armor. c. the server cvar random_health can be set to 1 to spawn health items at most deathmatch spawn locations; the extra item files for AQ2 maps supplied in the zip archive generally don't have any health items specified in them so use the random_health cvar. d. if you don't want to use/create/edit extra item files for AQ2 maps you can just play with the game items native to the map or the server can be set up to give each player a start weapon or two along with some ammo so matches don't become a war of blasters on spartan maps. e. AQ2 maps are pretty cool when played on an 'Insta-Gib' server where weapons and ammo native to the map are not spawned and players get a railgun or a rocket launcher and some ammo and the dmflags for DF_INFINITE_AMMO are turned on. 2.2 Client Options ------------------ 2.2.1 Hud Options ------------------ All players can modify the look of the HUD (heads-up display) to display extra statistics or the HUD can be turned off. Note that when using the chase cam to watch a bot you can configure your hud any way you like but when using the chase cam to watch a human client you are constrained to whatever hud configuration the human client is using. 2.2.1.1 Ammo Hud ----------------- Command: ammohud Players can display the quantities of all the ammo in their inventory using the ammohud command; the quantities of ammo will be displayed along the left edge of the display. The command ammohud is a toggle, enter once to enable the ammo hud, enter a second time to disable the ammo hud. Note that when playing CTF the only ammo showed on the display is gibbed heads, as the CTF "stats" displayed on the HUD use up most of the available stats. Bind a key ... 2.2.1.2 No Hud --------------- Command: nohud Players can completely turn off the HUD by issuing the nohud command; enter once to turn off the HUD, enter again to turn the HUD back on. Bind a key ... 2.2.1.3 Laser Sight -------------------- Command: laser An active laser sight is available to help you target your enemies. A green glowing dot is projected along the player's view angle to the farthest distance that can be seen; if another organic entity (player, bot, monster or carcass) is in the line of sight the green glowing dot will turn red. Note that all other players will be able to see your laser sight, so if your trying to sneak around undetected you may want to turn the laser sight off. The command "laser" toggles the laser sight on/off; bind a key to this command if you use it often. 2.2.1.4 Scanner ---------------- Command: scanner cvar no_scanner The scanner is a radar device that displays the positions of all other players in the game on the hud. In deathmatch players are represented by light blue dots which turn red if the player is invulnerable or dark blue when the player has the Quad Damage; their relative up/down position is indicated by an up or down arrow above/below the dot. In CTF the players are marked by a red or blue dot according to their team and a light blue dot if they have the quad or are invulnerable. The client command scanner toggles the scanner off/on. When you use the scanner you emit a dripping noise that other players can hear and bots can perceive. Bind a key to, ie. bind r 'scanner' The server operator can ban the use of the scanner by setting the no_scanner latched server cvar to 1, setting to 0 enables the scanner. If you're using the Quake2 Evolved engine the game_engine cvar must be set to 2 (version .23) or 3 (version .26b) for the scanner graphics to display correctly. For versions after .26b you should set game_engine to 0. 2.2.1.4.1 Scanner Offset ------------------------- Command: scannerxoffset Command: scanneryoffset The default position of the scanner is in the lower right hand corner of the display; the position can be changed using a two client commands, all position values are relative to this position: scannerxoffset : horizontal offset; is a whole number greater than or equal to 0. scanneryoffset : vertical offset; is a whole number greater than or equal to 0 scannerxoffset 320 scanneryoffset 240 sets the scanner to display near the center of the screen on an 800x600 display. The scanner offset values you set are not saved across map changes. 2.2.1.4.1 Scanner Range ------------------------ command: scannerrange The range of the scanner can be modified using the scannerrange client command. Each scanner range "unit" equates to 10 quake units of scanner range. The default range is 100 which shows all clients within 1000 quake units; changing the range to a smaller number decreases the scanner range, a larger number increases the scanner range. Negative numbers are not allowed, the lowest possible range is 1. scannerrange , is a whole number greater than 0 Example: 'scannerrange 50' sets the scanner range 50 X 10 quake units or 500 quake units. The scanner range value you set is not saved across map changes. If you like using a certain customized scanner setup each time you play, try the following key bind, alter the values to whatever you want: bind r "scannerxoffset 50; scanneryoffset 100; scannerrange 50; scanner" Each time you press the r key the scanner offset commands and the scannerrange command are run; the 'scanner' command toggles the scanner on if it's not on and off if it is on. 2.2.2 Spectator Chase Cam -------------------------- Clients connected to a server but not playing (they're spectators) can view the game action using a moveable camera that is positioned behind one of the game participants, allowing them to observe the participant as he/she/it plays the game. The chase cam can be switched to view any of players participating in the game. 2.2.2.1 Turning Chase Cam on/off --------------------------------- To use the chase cam in deathmatch type 'spectator 1' at the console and press the space bar to start chasing a player or bot (in ctf, choose the chase cam option from the ctf join menu). You can switch the player you are chasing by using the keys for 'inventory next' and 'inventory prev' (usually ']' and '['). To change cam modes press the 'inventory use' key (usually 'Enter'). To leave chase cam and join the game enter 'spectator 0' at the console. (If you have trouble returning to the game with the spectator cvar, type 'observe' at the console and you'll get the ctf join menu even if the game is not ctf; choose 'Join Red Team' or 'Join Blue Team' to join the game. If the game is not ctf you'll just join the game. Yeah, it's a hack but it works.) 2.2.2.2 Changing Chase Cam Camera Position ------------------------------------------- There are three methods of changing the chase cam mode. The easiest way is to press the 'inventory use' key (usually the 'Enter' key) repeatedly to cycle through all the available standard cam positions. Alternately, you enter the 'cam' command followed by the cam mode to switch to; the cam command can also be used to chase a particular player by using his name as an argument to the cam command. Finally, you can use client commands to customize the chase cam offset position from the the chase target when the cam is set to 'near' mode, see below... 2.2.2.2.1 Chase Cam Standard Positions --------------------------------------- Listed below are the names and descriptions of the various chase cam modes: near - the cam will closely follow the player being chased and will always attempt to position itself directly behind the chasee at a very close distance (about 60 units)- see the modifiying commands ccamxoffset, ccamyoffset and ccamzoffset below for variations. The cam tries to keep the chasee in the middle of the screen. The 'near' mode may be customized so you can move the chase cam closer/nearer to the chasee, see section 2.2.2.2.2 . mid - the cam will follow the player being chased and will always attempt to position itself directly behind the chasee at distance of around 240 units (about 4x the height of the player). The cam tries to keep the chasee in the middle of the screen. far - the cam will follow the player being chased but will not try to keep the player in the middle of the screen. The cam will lag far behind the player as he moves away from the cam. track - the cam is placed and always stays directly behind the chasee at a close distance; the cam always tracks the view angle of the chasee. This more or less the default chase cam from the Q2/ctf source. eye - the cam mimics the viewpoint of the chasee's 'eyes'; you see the game thru the chasee's eyes. This is a large hack, player models with excessive limb movement (SuperMale, ActionMale, Crakhor etc.) will have moving limbs and VWEP visible; the stock Q2 male and female models are fine. front - instead of being positioned behind the player looking at his back the cam is positioned in front of the player looking at his/her/it's pretty face. follow - the cam will follow the player being chased but will not try to keep the player in the middle of the screen (will lag behind the chasee). The cam will never be positioned more than 125 units above the chasee. Press the 'inventory use' key (usually the 'Enter' key) repeatedly to cycle through all the available standard cam chase positions. Press the 'jump' key (usually the space bar) to cycle through the available chase targets (bots and players). To specify a specific chase cam mode or player to chase use the cam command. The syntax of the cam client command: To change the view: cam where is one of: near, mid, far, track, eye, front or follow. To switch the player being chased: cam where is the (case-sensitive) name of a game participant OR cam next (chase the next player) OR cam prev (chase the previous player) 2.2.2.2.2 Chase Cam Custom Positions -------------------------------------- Three client commands position the chase cam ONLY when the cam is set to 'near' mode; specify the number of units to offset the chase camera, ie. 'ccamzoffset -20' will position the chase cam 20 units below the normal chasecam z position. ccamxoffset ccamyoffset ccamzoffset The "normal" position of the chase cam in 'near' mode about 100 units behind the chase target in the xy (horizontal) plane and 12 units above the chase target. The ccamxoffset and ccamyoffset commands operate independently and specify the camera offset from the normal position in the xy plane. If you set them the same the camera will attempt to stay the 'normal' position plus the specified number of units from the the chase target at all times; if you set them to different values the camera will zoom towards and away from the chase target depending on which direction the chase target is facing. Four examples: ccamxoffset 120; ccamyoffset 120 The cam will attempt to always stay about 220 units behind the chase target in the xy plane. The cam always faces the back of the chase target. ccamxoffset 50; ccamyoffset 800 The cam will zoom in to about 150 units from the chase target when the chase target is facing towards 0 degrees or 180 degrees; when the chase target is facing 90 degrees or 270 degrees the chase cam will zoom out from the chase target to about 900 units. The cam always faces the back of the chase target. ccamxoffset -600; ccamyoffset -600 The cam will be placed about 500 units *in front* of the chase target and will point towards the front of the chase target at all times. ccamxoffset -600; ccamyoffset 400 The cam will be placed about 500 units *in front* of the chase target and will point towards the front of the chase target when the chase target is facing towards 0 degrees or 180 degrees; when the chase target is facing 90 degrees or 270 degrees the chase cam will be placed about 500 units behind the chase target facing it's back. The cam will pan from watching the view from in front of the chase target facing it's front to the view from in back of the chase target facing it's back as the chase target rotates in the xy plane. Remember, these are client commands, not cvars; the values set by the cam offset command are remembered until the map changes, then they are reset to 0. 2.2.2.2.3 Killercam --------------------------- command: killercam The killercam client command toggles the behavior of the chase cam when the client being chased gets fragged. When killercam is set on the camera will switch to chasing the player who fragged your chase cam target; with killercam off you continue watching your original chase target when he/she/it respawns. The server cvar default_chase_killer (see 2.1.2.13) sets whether killercam is initially on or off when you start the chasecam. 2.2.3 Ycam (3rd person perspective) ------------------------------------ The ycam is third person perspective, meaning a camera is placed outside the player and he can watch his player model as he plays the game. 2.2.3.1 Turning Ycam on/off ---------------------------- command: ycam The 'ycam' command toggles the ycam on and off, bind a key to 'ycam' if you wish to quickly toggle the ycam. 2.2.3.2 Changing Ycam Camera Position -------------------------------------- The following client commands change the ycam camera offset positions from the default ycam starting position, # should be a whole number: ycamxoffset # ycamyoffset # ycamzoffset # ycamxoffset controls the distance the ycam camera is placed behind the player ycamyoffset controls the distance the ycam camera is left/right offset from the center view of the player (positive values move the camera to the left, negative values move the camera to the right ycamzoffset controls the height the ycam camera is placed above the player (positive values move the camera up, negative values move the camera down). Remember, these are commands, not cvars, and must be run each time a new map is loaded as the values are not saved across map changes. If you like using a certain custom ycam position each time you play then try the following key bind, alter the values to whatever you prefer: bind y "ycamxoffset 55; ycamyoffset 12; ycamzoffset 24; ycam" Pressing the y key will run the ycam offset commands each time; the "ycam" command will toggle the ycam on if it's not on or off if it is on (see 2.2.3.1). 2.2.4 Client Weapons/Ammo Commands ---------------------------------- 2.2.4.1 tosshead command ------------------------ command: tosshead The tosshead command throws a homing head in the air, provided you've picked up a gibbed head; see section 2.1.1.3.2 for a description of homing heads. Bind a key if you use this command frequently. Syntax : tosshead 2.2.4.2 airstrike ----------------- The airstrike command initiates an airstrike; see section 2.1.1.3.1 for an explaination of an airstrike; bind a key if you use this command frequently. Syntax : airstrike 2.2.4.3 detpipe --------------- The detpipe command detonates all pipe bombs you have tossed which have not been detonated. Yeah, bind that key ... Syntax : detpipe 2.2.4.4 firemode ---------------- The firemode command is an alternate way of specifying the fire mode of a weapon. Normally you repeatedly press the key associated with the use of a weapon to cycle thru all the weapon's available fire modes; using the firemode command you can change weapons and switch to a particular fire mode with one keystroke. The firemode command takes an integer (whole) number as an argument. It switches the fire mode of your current weapon to the fire mode you would get by pressing the weapon's "use" key the specified number of times assuming the weapon was initially set to fire normal Q2 ordinance. You can bind a key to the commands or define an alias and bind a key to the alias. Examples: bind l "use hyperblaster;firemode 3" Pressing the 'l' key will change your weapon to the hyperblaster and your ordinance to lightning. alias cluster "use grenade launcher;firemode 3" bind c "cluster" Pressing the 'c' key will change your weapon to the grenade launcher and your ordinance to cluster grenades. All weapon firemodes are the same numbers as the fixed fire mode settings specified in 2.1.1.1.1.5. If the ammo cost of the firemode specified by the firemode command is greater then the ammo in your inventory then the firemode will default to 0, the default Q2 firemode of your current weapon; ditto if you specify a Napalm firemode when the server cvar no_napalm is set to 1; ditto again if you specify a firemode not available to you when weapons_mode is set to 3 (Arms for Heads) and you haven't picked up enough gibbed heads to upgrade your weapons to include that firemode. 2.2.4.5 cyclefiremode --------------------- The cyclefiremode command allows you to cycle through all the available firemodes of your whatever your current weapon happens to be. Any firemodes you don't have enough ammo to use or you are not allowed to use are eliminated as choices. Bind a key, ie. bind n "cyclefiremode". 2.2.5 Client Monster Sidekick Commands -------------------------------------- 2.2.5.1 The sidekick Client Command --------------------------------------- sidekick # The "sidekick" command controls which monster sidekick is created for a player. The monster will spawn about 100 units in front of you and to your left or right; if there isn't enough room to spawn a monster in either position you'll get an error message. Here's how the sidekick command works: Command Monster Created Default Ammo Cost ---------- --------------- ----------------- sidekick 1 soldier 75 shells sidekick 2 infantry 150 bullets sidekick 3 gunner 75 grenades sidekick 4 chick 75 Rockets sidekick 5 tank 40 slugs sidekick 6 gladiator 150 cells The ammo cost for each monster can be set by the server operator, see above at 2.1.1.3.3.1. 2.2.5.2 The bestsidekick Client Command ------------------------------------------- In the heat of battle you don't want to have to open the console and type the sidekick command to spawn a monster sidekick; likewise you may not want to bind six keys to spawn each of the available sidekicks. The bestsidekick command is an alternative command: bestsidekick takes a number argument of up to six digits, specifying the order of preference of sidekicks, each digit corresponding to the number argument you'd use to specify the sidekick to spawn with the sidekick command as specified in 2.2.5.1. The digits are tested from left to right, the leftmost digit specified is tested first; if you have enough ammo in your inventory then that monster sidekick is spawned, if not then the second digit from the left is tested, etc. If you don't have enough ammo to spawn any of the monsters specified by the argument number then no sidekick monster is spawned. Here is an example: bind z "bestsidekick 534126" In this example, when you press the z key, first your inventory is checked for enough slugs to spawn a tank monster (5) and if you have them a tank sidekick is spawned; if you don't have enough slugs then your inventory is checked for enough grenades to spawn a gunner monster (3), if you have them one is spawned; if not, your inventory is checked for enough rockets to spawn a chick monster (4), etc. 2.2.5.3 Teleporting Your Monster Sidekick --------------------------------------------- if you issue the sidekick or bestsidekick command when you already have a monster sidekick your sidekick monster will attempt to teleport to your location. The monster will teleport about 100 units in front of you and to your left or right; if their isn't room to teleport your monster at these locations you'll get an error message and the monster won't teleport to you. 2.2.6 Client Misc. Commands ---------------------------- 2.2.6.1 Standard iD Client Commands ----------------------------------- These client commands are useful standard iD commands. 2.2.6.1.1 viewpos ----------------- The viewpos command that tells you what world xyz coordinates your player model's "eyes" are viewing the world from. The text output of the command is formatted as follows: : a x, y and z are the coordinates the client is viewing the world from a is the horizontal angle (in degrees) from 0 degrees the client is viewing This command is useful for determining the position to add additional items and monsters to the map or for determining the position to move a node to. 2.2.6.1.2 id ------------ The id command toggles the iD player id function on/off; the id function prints the name of other clients on the screen when they are in front of you and visible to you. 2.2.6.2 Additional lOkO Client Commands --------------------------------------- 2.2.6.2.1 +jetpack alias -------------------------- You get the JetPack when you pick up the JetPack tech or the server operator sets the cvar start_jetpack to 1. There are two built-in aliased commands that operate the jetpack: "+jetpack" turns the jetpack on and "-jetpack" turns the jetpack off. Bind a key to "+jetpack". 2.2.6.2.2 Off-Hand Hook commands -------------------------------- There are two built-in aliased commands that shoot and retract the off-hand hook; "+hook" shots the off-hand hook "-hook" retracts it. Bind a key to "+hook". 2.2.6.2.3 CTF Grapple commands ------------------------------ The dll automatically creates 2 alias commands for using the CTF grapple for navigation or as a weapon: +ctfhook is an alias for "use grapple;+attack" -ctfhook is an alias for "-attack;weaplast" Bind a key to "+ctfhook"; when pressed it switches weapons to the grapple and fires it. When you release the bound key you unhook the grapple and switch to the last weapon you were using. 2.2.6.2.4 svstatus command -------------------------- This command allows clients to view various server settings. The svstatus command with no arguments shows the top level game cvar settings; adding one of the valid arguments to the command shows lower level game settings. svstatus - displays high level game cvars (deathmatch, ctf, location_damage, etc) svstatus bots - displays cvars pertaining to bots (hazard_checking, bot_sound_perception, etc) svstatus ammo - displays cvars pertaining to ammo (weapons_mode, max ammo, start ammo, etc) svstatus fog - displays cvars pertaining to fog generated by the game dll svstatus weapons - displays cvars pertaining to weapons (banned weapons, start weapons, etc.) svstatus monsters - displays cvars pertaining to monsters (monster_mode, monster sidekick costs, etc.) svstatus costs - displays cvars pertaining to ammo costs for alternate fire modes svstatus misc - displays other server cvars 2.2.6.2.5 altscore command ------------------------------- altscore This client command displays more detailed scoring information on the console. The stats displayed for each player in the game are time, score, # of frags, # times fragged, head bonus score, ctf score, damage given, damage taken and the number of frags achieved on a player's longest uninterupted frag streak. 2.2.6.2.6 zoom scope -------------------- zoom The zoom command controls magnification of the zoom scope in the following manner: zoom turns off the zoom scope zoom 1 repeated execution cycles the zoom scope from normal magnification through 3 increasing magnifications then back to normal magnification. Bind a key to "zoom 1". 2.2.6.2.7 botskills command --------------------------- This client command shows the skill levels on the console of all the bots playing the game. 2.2.6.2.8 botroles command -------------------------- The botroles client command displays on the console each bot's name, team and their current ctf role. 2.2.6.2.9 monsterscore command ------------------------------ This client command displays scoring information about monster kills on the console. The stats displayed for each player in the game are time, score, # of frags, # monsters the player has killed,the # of times the player has been killed by monsters and the # of frags by a sidekick owned by the player. 2.2.6.2.10 showdmflags command ------------------------------ This client command shows on the console all the flags in the dmflags server cvar and if the flag is turned on or off. If you pass it an integer argument the showdmflags command will display the on/off values of each dmflags flag for the integer passed. 2.2.6.2.11 itemsum command -------------------------- The itemsum command displays the classname and quantity of each item in the item table loaded or created when a map is loaded. 2.2.6.2.12 extrasum command ----------------=---------- The extra sum command displays the classname and quantity of each item in the extra item table, which stores info about any extra items added to the map using the spawnitem server command or loaded on the map in an extra item file. 2.3 Bots -------- The lOkO bot uses client emulation to navigate a level; it issues the same commands to the server dll as a human client pressing the keys bound to "+forward","+back","+strafe","+right", etc. When jumping, the bot's velocity is boosted slightly in the direction of travel. The bot will become aware of and test for lava, slime and trigger hurt once a few bots or humans are killed by them. The bot cannot detect lasers on maps. Bots can navigate platforms, doors that act like platforms, teleporters, jump pads, wind tunnels, secret doors and doors where a button must be shot to open it once a node file is generated. It can be routed to press simple buttons where the door is directly adjacent to the button that opens it but cannot press buttons and navigate doors when the door and button are far apart. Bots can ride a func_train if it does not have Bots are aware of "dll fog", OpenGL fog controlled by the lOkO dll; they won't percieve other bots or players beyond any distance where the fog is 98% opaque. Bots are *not* aware of "engine fog", OpenGL fog controlled by any of the custom OpenGL game engines, ie. Quake2Max, Quake2 Evolved, etc.; they will act as if visibility is unlimited. The lOkO bot has 4 skill levels, skill 4 is the highest skill: 1 - Skills R' Low 2 - Average Joe 3 - Challenging Foe 4 - Bad Mo' Fo 2.3.1 Managing Bots ------------------- Almost all bot commands (except ctf bot orders) can only be run on the server. The exception is the botmenu command; server commands cannot display menus. 2.3.1.1 Adding Bots ------------------- 2.3.1.1.1 The allow_bot_menu Server cvar ---------------------------------------- allow_bot_menu Access to the botmenu command is controlled by the server cvar allow_bot_menu; the server operator should set allow_bot_menu to 1, use the botmenu to addbots and set allow_bot_menu to 0. Since (I assume) most people will be playing the lOkO mod on their own machine at home and not running a LAN or internet server, the default value for allow_bot_menu is 1. If you are running a public server you should be aware of this potential "back door". Default value: 1 2.3.1.1.2 The botmenu Command ----------------------------- The botmenu command will put a menu on your display allowing you to easily add bots to the game without having to memorize lots of commands and parameters. You can set the bot's skill level (1-4, 1 is easiest), the bot's player model and it's skin by scrolling thru all the choices. A random name is automatically chosen for the bot. You can use the botmenu to add bots to a CTF game, the botmenu will only display a model as a menu choice if CTF skins (ctf_r.pcx and ctf_b.pcx) exist for the model. The bot is named using the the first letter of it's team name and an integer value, ie. r1, r2 or b1, b2 etc. By default, the botmenu command is bound to the F2 key. The botmenu cannot read player models and skins that are in pak files. Only models and skins in directories off the baseq2/players directory are displayed by the botmenu command. 2.3.1.1.3 The addbot command ---------------------------- The server command addbot will add one bot to the game. The stuff inside the brackets ([ ]) is optional. sv addbot [skill - 1-4] [model/skin] [name] add a deathmatch bot - without specified options, a random skill bot will be added and will use the male or female model with one of the stock iD skins; you can further specify a skill level (1-4), a model and player skin and a name Example : sv addbot 3 male/grunt JoeGrunt sv addbot skill (1-4) team (red or blue) [model/skin] [name] add a teamplay/ctf bot - you must specify a skill level (1-4) and a team (red or blue). Example : sv addbot 4 red male/ctf_r "Red Menace" A file named botnames.txt in the game directory contains names that are used to name bots when a bot is added without specifying a player name. The dll will load up to 192 bot names from the botnames.txt file. When the game is teamplay or CTF, when you add a bot to a team without specifying a player name the bot is named using the the first letter of it's team name and an integer value. ie. adding 3 unnamed bots to the red team will cause those bots' player names to be r1, r2 and r3. 2.3.1.1.4 The loadbot command ----------------------------- For convenience, you may pre-define bots in a text file name bot.cfg in the game directory and load the pre-defined bot using the server command loadbot. You can't use the loadbot command when the game is CTF or teamplay. The format for each line of the bot.cfg file is: An example bot.cgf file might look like: # bot.cfg file # lines starting with the # sign are comments; blank lines are ignored grunt male/grunt 3 razor male/razor 3 voodoo female/voodoo 2 ssvamp crakhor/ssvamp 4 centurion marine/centurion 4 wimpy marine/reese 1 "bo diddly" messiah/messiah 4 To load a predefined bot using it's default skill: sv loadbot voodoo To load a predefined bot overriding it's default skill: sv loadbot wimpy 4 sv loadbot "bo diddly" 3 2.3.1.2 Removing Bots --------------------- sv rb [name] [all] OR sv removebot [name] [all] removes a bot or all bots from the game. If the name contains white space enclose the name in double quotes, ie. sv rb "eric dolphy" removes the bot named eric dolphy. 2.3.1.3 Killing Stuck Bots -------------------------- Occasionally a bot will get stuck and cannot move (he may fall and get lodged in a tight space) or a bot may fall into the void (the area outside the map). The server command killbot will kill the specified bot and he'll respawn anew. sv kb [name] [all] OR sv killbot [name] [all] kills a bot or all bots in the game. 2.3.1.4 Re-spawning Bots across level changes --------------------------------------------- save_bots init_bots The server operator can set the server cvar save_bots to 1 so bots who exist in the game will re-join the game when the level changes. Setting save_bots to 0 turns off persistant bots. Bots playing the game are stored to a temporary disk file before the level changes and reloaded from the disk file when the new level starts. Note that two different disk files are used to store the bots across level changes, one for CTF/teamplay and one for normal deathmatch; if bots are playing normal deathmatch with save_bots set to 1 and subsequently ctf is set to 1 and the map changes the teamless bots will be saved to the CTF/teamplay file, when they load to the new map the bots will all join the blue team and you might have problems if the bot's player model does not have the ctf skins (ctf_r.pcx and ctf_b.pcx). The default value for the save_bots cvar is 0. If the server cvar init_bots is set to 1 when the server is initially started and the cvar save_bots is set to 1 the bots saved to disk the last time the server was run with the save_bots cvar set to 1 will be loaded into the server. Note the dll sets the init_bots cvar to 1 internally as soon as the first level is loaded by the server anyway; set init_bots to 1 on the command line (+set init_bots 1) or in the autoexec.cfg file. The default value for the init_bots cvar is 0. Syntax: save_bots 1 init_bots 0 2.3.1.5 Other Bot Options ------------------------- 2.3.1.5.1 Bot Chat ------------------ bot_chat When the server cvar bot_chat is set to 1 bots will say semi-witty things upon killing/being killed/suiciding. Setting bot_chat to 0 turns off bot chatting. The text file "botchat.txt" should be in your game directory, feel free to customize it. Default value: 1 2.3.1.5.1.1 Bot Chat Frequency ------------------------------ bot_chat_frequency The server cvar bot_chat_frequency sets the minimum number of seconds between bot chats. Set to a low number (10) for chatty bots or a high number (60) for less chatty bots. Default value : 25 2.3.1.5.2 Bot Hazard Detection ------------------------------ hazard_checking The server cvar hazard_checking controls how much testing the bots do for lava, slime and my favorite, trigger_hurt. Hazard tests by bots grab precious clock cycles from the engine and on slower machines with many bots this may slow the game perceptably. This cvar will let you control how much hazard testing is performed by bots. Note that hazard_checking equal to 1 or 2 has a further requirement of a certain number of bots/players must actually be fragged from lava/slime/trigger_hurt before bots test for hazards; this was coded this way so with the default value set to 2 if there is no lava/slime/trigger_hurt on the map the bots won't spend clock cycles looking for hazards, they sort of "learn" the map has hazards from deaths by lava/slime/trigger_hurt. Setting hazard_checking equal to 3 turns on full time hazard_checking regardless of deaths due to lava/slime/trigger_hurt, setting hazard_checking to 0 disables almost all hazard_checking. Also note testing for lava/slime and trigger_hurt are independant; if you set hazard_checking to 2, 4 deaths must occur by lava or slime for lava/slime testing to begin and 4 deaths must occur before by trigger_hurt before testing for trigger_hurt begins. hazard_checking 0 - bots do hardly any hazard testing (and lots of lava jumping) hazard_checking 1 - bots do hazard testing on places they plan to go each time they decide to attack, retreat, head for an item, etc. no checking is done until 2 deaths by lava/slime/trigger_hurt occur to bots/humans. hazard_checking 2 - bots do hazard testing on places they plan to go AND do hazard testing each clock cycle in the direction they are going; no checking is done until 4 deaths by lava/slime/trigger_hurt occur to bots/humans hazard_checking 3 - the same as 2 except hazard testing is on all the time without checking for any deaths by lava/slime/trigger_hurt. I recommend you leave hazard_checking to the default of 2; on maps with no lava/slime/trigger_hurt no hazard testing occurs because no bots or players die from lava/slime/trigger_hurt so no clock cycles are ever wasted, maps where there is alot of lava/slime/trigger_hurt you'll get to 2/4 deaths by hazard pretty quickly and hazard_checking will kick in automatically. I suppose if you have a super-fast computer you could set this to 3 with no concern (you may not see any slow downs with full hazard_testing every clock cycle) but since I don't have a fast machine I don't really know. Amen. Default Value: 2 2.3.1.5.3 Bot Laser Site ------------------------ bot_site When the server cvar bot_site is set to 1 all bots turn on their laser sites. This is just for show, the bots don't really use them for anything. A good way to use up those pesky free edicts. Default Value: 0. 2.3.1.5.4 Bot CTF Auto Role --------------------------- red_auto_role blue_auto_role In a CTF game you can set the bots on either team to automatically assume a role of defend it's flag, attack the enemy flag or roam the level by setting the server cvars red_auto_role and/or blue_auto_role to 1. When a ctf bot spawns/respawns it's default role is roam. If the bot acquires enough weapons/ammo to get some frags and is somewhat healthy it will automatically change roles; the priority is to defend the flag, so if the team needs some more flag defenders the bot would change roles to defense. If there are enough defenders on it's team and the team needs more members attacking the enemy base then the bot will choose a role of attack. If his team has enough attackers and defenders then the bot will choose to remain a roamer, unless he has acquired tons of weapons/ammo, when he'll switch to the role of attacker. If blue_auto_role or red_auto_role is set to 0, the team member's roles will stay at roam until a human on the team orders him to assume a specific role (see the commands in 2.3.1.5.5.2); a bot with a role of roam will still return the enemy flag to it's team's base. If the game being played has the cvar ctf set greater than 0 and there are no team flags present on the map red_auto_role and blue_auto_role should be set to 0. Default value(s): 1 2.3.1.5.5 Explicit Bot CTF Roles -------------------------------- You can command the bots on your CTF team to assume specific roles when the cvar for your team, red_auto_role or blue_auto_role, is set to either 0 or 1. The bot stays in the role he is assigned until he is fragged or he is commanded to assume a different role or the role switches when he picks up the enemy team's flag. The roles are: defend - the bot heads back to his own base (the closest one if multiple team flags are present); when he reaches his base he switchs to patrolling his base (see the patrol role below). attack - the bot heads for the enemy base. If it gets an enemy flag it will switch to role defend and head back to it's own base. If no flag is at the enemy base when the bot gets there it will hang around the base waiting for a flag to spawn. roam - the bot roams the level to acquire weapons, ammo, etc.; it may decide to head for the enemy base, it may not. If it gets an enemy flag it will switch to role defend and head back to it's own base. patrol - the bot heads to his "patrol node"; when he reaches it he will randomly choose a node between 300 and 600 units away and heads for it. When he then reaches that random node he heads back to his patrol node. The bot will repeat this cycle of heading to a random node then heading to his patrol node for as long as he assumes the patrol role. travel - the "commander" of the bots specifies a sequence of nodes to follow with the "route" command (explained below). The bot first heads towards the first specified node; when he reaches it he then heads for the second specified node; when he reaches that node he heads for the third specified node etc. etc ... when he reaches the last specified node he switchs roles to patrol the last node specified. auto - only when the cvar for the bot's team, red_auto_role or blue_auto_role, is set to 1, a bot that has been explicitly commanded will return to choosing his own role. Note that a bot commanded to attack, defend or roam will immediately head for their own base if they happen to get the enemy flag; commanded bots with the role of patrol or travel who have the enemy flag will continue on patrolling or travelling their route unless explicitly commanded to change roles. The default role for a bot not explicitly commanded to assume a role when the auto role cvar for his team is set to 0 is roam. When a commanded bot is fragged he immediately forgets his last role and assumes a role of roam when respawning. 2.3.1.5.5.1 Commands For Displaying Node Locations ---------------------------------------------------- Navigation nodes are data structures that describe the physical locations of points on the level; they aren't entities and can't normally be detected on the map but a temporary entity can be spawned to show the position on the map the node data represents. You need to know what nodes are close or where nodes are located on the level to specify the nodes for some of the ctf role commands. Nodes are differentiated by a unique integer node number for each node. The 3d coordinates of the location the node represents is stored in the node data structure. Additionally, each node has an integer node type attached to it which specifies other properties of the node. The different node types and their meanings: Type# Type Properties ----- ------- ------------------------------------- 0 move a node which can be walked or run to 1 ladder 2 platform a node at the bottom or top of a moving lift 3 teleporter a teleporter or teleporter destination is at this node 4 item a game item is at this node (weapon, ammo, health, etc,) 5 water a node is directly above or submerged in water 6 grapple the bot uses the offhand hook to navigate to grapple nodes 7 jump the bot must jump to reach this node; jump nodes are placed at the TOP of ladders... 8 9 door bottom the node is just above the lowered position of a moving door that acts as a lift. 10 door top the node is just above the raised position of a moving door that acts as a lift 11 shoot the bot must shoot a secret door or button at the node's location 12 door open the node is at a location where a door must be opened with the "opendoor" command, mainly Action Quake2 maps; a few non-AQ2 maps have door open nodes at rotating doors. The bot checks the door is in the open position before attempting to navigate thru the door. The "path" from one location on a map to another location on the map consists of the sequence of nodes the bot must travel. The bot always plans the shortest possible path when moving between map locations. The lOkO mod stores the navigation nodes to a disk file in the lokonav directory off the quake2 directory in "noodle" files with an extension of ".ndl"; The "noodle" files store node location, the node type and each node adjacent to the node which can be navigated to from the node. When a map is loaded by the server which has not been "noded" the game dll creates an initial set of nodes, one node at the location of each item (ammo, weapons, health, etc.), at each teleporter and teleporter destination and at the top and bottom of each platform. See the LOKOPATHING.txt file for additional information about nodes and paths. 2.3.1.5.5.1.1 The findnode command ----------------------------------------- The find node command finds the closest node to your position within 128 units and displays in the console it's unique node number, it's node type number and the map coordinates the node represents; a colored sphere is displayed on the level at the node's location, the TOP of the sphere represents the exact position. For example, the text displayed in the console for the findnode command might look like this node 12 type 4 <120.000 300.000 24.125> As an example, suppose you would like to command a bot on your team to patrol the BFG on q2ctf1. You first must determine the node at the BFG. Navigate to the exact position of the BFG and issue the findnode command. A green sphere should appear at the BFG's location and the node number, 3d coordinates and the node type (4) should be displayed in the console. Bind a key to the findnode command, ie. bind F11 "findnode" 2.3.1.5.5.1.2 The shownode command ----------------------------------------- The shownode command takes an integer argument of a node number and displays in the console node type number and the the map coordinates the node represents; a colored sphere is displayed on the level at the node's location, the TOP of the sphere represents the exact position. "sn" is a synonym for the shownode command. Example: shownode 54 or sn 54 might display in the console: node 54 type 3 <-1024.000 1600.000 324.125> 2.3.1.5.5.1.3 The shortpath command ----------------------------------- The shortpath command takes two integer arguments representing the "from" node number and the "destination" node number; the sequence of nodes representing the shortest possible path from the "from" to the "destination" nodes is displayed in the console along with each node's node type number; a colored sphere is displayed on the map at each node's location . Only the first fifteen nodes of the "path" are reported on and displayed. "sp" is a synonym for the shortpath command. For example: shortpath 75 400 or sp 75 100 might display in the console: node 76 type 4 node 177 type 0 node 178 type 0 node 200 type 0 node 199 type 0 node 44 type 4 node 42 type 4 node 335 type 0 node 400 type 0 2.3.1.5.5.1.4 The itematnode command ------------------------------------ The itematnode command takes an integer argument of a node number (of an item node) and displays on the console the classname of the item in the item table at the specified node. 2.3.1.5.5.2 Commands For Explicit Bot CTF Roles ----------------------------------------------- There are two commands that control bots ; the stuff between <> is mandatory, between [] is optional (don't include the <> or [] in the actual command!): route <1st node> [2nd node] [3rd node] ... [8th node] The route command tells the bot to change to travel role and head for <1st node>; when he reaches <1st node> he then heads for [2nd node], etc. You can specify up to eight nodes for the bot's route. It is not necessary to specify each node of the route; rather, think of the nodes specified as check points or sign posts; the bots travels the shortest path of nodes to whatever node is their current route node, then switches route nodes to the next route node and travels the shortest path of nodes to that node, etc. When the bot reaches the last node in his route he will switch roles to patrol and patrol the last node of his route. Note: you *cannot* specify node 0 as a route node; most noodle files have node 0 moved off the map so it is never encountered but some older noodle files may have node 0 as an accessible node. Example: route b1 43 75 88 130 27 commands the bot named b1 to use the specified nodes as a travel route. role [patrol node] [patrol timeout] The role command tells the bot what role to assume. is the name of the bot to command is the role he is commanded to assume; the possible roles are roam (or r) attack (or a) defend (or d) patrol (or p) travel (or t) auto (when the auto role cvar for his team is 1) The patrol role option with no node specified causes the bot to patrol his own base until he is fragged or commanded to assume another role. Specifying a patrol node causes the bot to patrol the node specified until he is fragged or commanded to assume another role. If a patrol timeout is specified (in seconds) the bot will patrol the node for the specified time period then revert to roaming. The travel role option must be issued *after* a bot has been issued a "route" command (see above) or else the travel command is ignored, ie. a bot with role travel can be told to switch to another role; later he can commanded to resume his travel route by issuing the role command with the travel keyword. Examples role r2 roam or role r2 r commands bot r2 to roam the level. role r1 attack or role r1 a commands bot r1 to head for the nearest enemy base. role b4 defend or role b4 d commands bot b4 to head for his team's nearest base. When he gets there he switches to the patrol role and patrols the base. role b12 patrol or role b12 p commands bot b12 to head for the his team's nearest base and patrol it. role r2d2 patrol 56 or role r2d2 p 56 commands bot r2d2 to head for node 56; when he gets to node 56 he patrols around it until he is fragged or ordered to assume another role. role xxx patrol 300 120 or role xxx p 300 120 commands bot xxx to head for node 300; when he gets to node 300 he patrols around it until 120 seconds have elapsed, he is fragged or is ordered to assume another role. If he is alive after 120 seconds have elapsed he switches roles to roam. role b3 travel or role b3 t commands bot b3 to resume travelling along the route *previously specified* with the "route" command; when he gets to the last node of his route he switches roles to patrol and the last node of his route becomes the node he patrols. He continues patrolling that node until he is fragged or ordered to assume another role. role "Dirty Hairy" auto tells the previously commanded bot named Dirty Hairy to return to automatically choosing an appropriate role when the cvar for his team, red_auto_role or blue_auto_role, is set to 1; if set to 0 the bot will assume a role of roam. 2.3.1.5.6 Bot Navigation Without the Off-Hand Hook -------------------------------------------------- no_hook_navigation When the server cvar no_hook_navigation is set to 1 bots will not use the off-hand hook for normal navigation around the level, but will still use it to get out of lava/slime. This is a 'latched' cvar that won't take effect until the level changes. Be forewarned, this has been added as an after thought; many levels I have made paths for in the past may have only 1 path to/from an item which uses the hook, by turning no_hook_navigation on the bots won't be able to reach the item. If the game is Capture the Flag no_hook_navigation should *always* be set to 0. Default : 0. 2.3.1.5.7 Bot Hydrophobia ------------------------- bot_hydrophobia The server cvar bot_hydrophobia controls the likelihood that a bot will choose a route that will take him through water when a land route is also available. This is a 'latched' cvar that won't take effect until the level changes. The default value of 175 will cause the bots to give a small priority to land routes; setting bot_hydrophobia to a large value like 400 will cause bots to almost exclusively choose land routes; setting bot_hydrophobia to a value smaller than 175 will cause the bot to care less whether his route takes him through water or not. This cvar setting is most useful on ctf maps like q2ctf1, where the "euclidian" shortest distances to all the best goodies are through water. On q2ctf1 setting bot_hydrophobia to 175 causes the bot's route from flag to flag to be exclusively over land; at 150 the bot's route from flag to flag will mostly be through water. The lowest possible value of bot_hydrophobia is 1. This is uber-geeky stuff that only unusual people will be interested in. Default Value: 175 2.3.1.5.8 Bots and the notarget command --------------------------------------- notarget Invoking the standard iD command notarget will cause bots to completely ignore you when choosing an enemy, even if you attack them. This command is a toggle, subsequent invocation of the notarget command turns it on and off. Note that the server cvar cheats must be set to 1 for notarget to work, cheater. 2.3.1.5.9 Viewing Bot AI ------------------------ show_bot_ai When using the chasecam to watch a bot you can view in the HUD the highest level movement AI the bot is executing when the server operator sets the server cvar show_bot_ai to 1. A short description of each AI move the bot executes is displayed in the HUD, replacing location damage messages. Default Value: 1 2.3.1.5.10 Verbose CTF Bots cvar -------------------------------- verbose_ctf_bots The server cvar verbose_ctf_bots controls how much CTF bots communicate with their human teammates, when set > 0 bots tell all humans on their team when they switch roles to attacking the enemy base or defending their base; when set > 1 commanded bots also tell all humans on their team when they switch patrol nodes and when they reach intermediate nodes while traveling a route. Default Value: 1 2.3.1.5.11 CTF botlocations command ----------------------------------- The client command botlocations will cause all bots on a client's team to report there location. If the server cvar freeze_time is set to a value of 30 or greater a bot will report that it's frozen as well as it's location. "loc" is a synonym for the botlocations command. 2.3.1.5.12 Bot Sound Perception cvar ------------------------------------ The server cvar bot_sound_perception controls if bots sense sounds made by other clients; set to 1 for bots to perceive sounds, 0 for deaf bots. Bots never sense sound when playing Capture the Flag or other team play games, as well as when the game is bots vs humans. Bots that are healthy, well armed and without a visible enemy will sense and follow the sounds players/bots make when firing weapons, picking up items, entering/leaving water, using the jetpack, screaming from pain, etc. Bots never hear the sound of player footsteps. Default Value: 1 2.3.1.5.13 bots_see_thru_water cvar ----------------------------------- The server cvar bots_see_thru_water controls if bots can detect other players or monsters through the surface of water; when bots_see_thru_water is set to 0 then bots submerged in water cannot detect other players or monsters above the surface of water, and bots above the surface of water cannot detect other players or monsters submerged below the surface of water. Default Value: 1 2.3.1.5.14 teleport_dislike cvar -------------------------------- The server cvar teleport_dislike controls the bot's preference for using teleporters to navigate the map. A bot uses the shortest route possible to it's destination. When teleport_dislike is set to it's default value of 0, teleporters that move bots great distances are "rewarded" during the distance calculation between teleporters and their target destinations, causing routes to be calculated that take the bot though teleporters; when teleport_dislike is set to a value above 0 the distance calculation between teleporters and their target destinations is "penalized" proportional to the value, causing routes to be calculated that favor using teleporters less. The effect on bot routes varies from map to map depending on how far the teleporter transports, but usually setting teleport_dislike to a high value, say, 100 (as little as 20 on some maps) will cause routes to be calculated that avoid teleporters totally, if possible. For example, on the map gotcha.bsp there are two teleporters that move the bot around the map; when teleport_dislike is set to 0 the bots constantly use the teleporters to navigate the map, when teleport_dislike is set to 40 or above a bot will never purposely use the teleporters on the map even if it's very close to a teleporter and the bot's destination is very close to the teleporter target destination. No matter what the value of teleport_dislike is, if the only route to a bot's desired location goes through a teleporter then the bot will use the teleporter. Default Value: 0 2.3.1.5.15 train_dislike cvar -------------------------------- The server cvar teleport_dislike controls the bot's preference for using func_trains to navigate the map; it functions much like the teleport_dislike cvar does for teleporters (see 2.3.1.5.14), though the distance calculation for a func_train is never "rewarded". No matter what the value of train_dislike is, if the only route to a bot's desired location requires riding a func_train then the bot will ride the train. Default Value: 0 3.0 Sample Configuration Scripts --------------------------------- Included in the zip file are a number of configuration scripts to help the server operator quickly configure the server cvars for the desired game configuration. The server operator runs the scripts from the console with the exec command: exec Here are the names of the scripts and a description of what they do; note you may want to alter some values to suit your taste, like the cvars weapons_mode, dmflags and pro_rocket. The scripts should be run at start up or before the level changes. straightdm.cfg Unadorned vanilla deathmatch: no ctf techs spawn, no dropped back packs, no respawn safety, no air strikes, no bouncing blaster bolts, no pro-rocket (including fast weapon switching), no sticky grapple, no locational damage, no homing heads, weapons_mode 0 (only normal Q2 fire mode), max megahealth 250, no hook, no grapple, no deathmatch monsters. Nothin' except shotgun shells and bullet casings ejecting. dm_standard_techs.cfg Same as straightdm.cfg except the normal Q2 CTF techs spawn: auto doc, disruptor sheild, haste and power amplifier. dm_all_techs.cfg Same as straightdm.cfg except all the techs spawn: auto doc, disruptor sheild, haste, power amplifier, voodoo, ammo regen, lightning defense, vampire and jetpack. lithium_like.cfg Game play sorta like the lithium mod: same as straightdm.cfg except techs spawn: haste, auto doc, disruptor shield, power amplifier and vampire; bots use the off-hand hook for navigation, pro-rocket turned on (including fast weapon switching). loko_standard.cfg The out-of-the-box lOkO config (defaults for all cvars): all techs spawn, respawn safety 3 sec., dropped back packs, bot hook navigation, air strikes, bouncing blaster bolts, pro-rocket (including fast weapon switching), sticky grapple, locational damage, weapons_mode 2 (cost mode), max megahealth 999, no deathmatch monsters. loko_extreme.cfg A bit more extreme than the default lOkO config: same as loko_standard.cfg except all players can toss homing heads, start with Haste (weapon fire rate doubled) and have jetpacks enabled (hence no voodoo, haste or jetpack techs spawn), max health set to 125, start health set to 125, monster_mode is set to 1 for Monster Sidekicks which cost 1/2 the normal ammo cost, no_target_speaker 1 to avoid sound index overflow. For more extremeness, give all players 60 rockets at startup (set start_rockets 60) and set the cost of an airstrike at 30 rockets (set air_strike_cost 30), so each player spawns/respawns with two air strikes! With all players having the jet pack, it's best to play the extreme configuration on large outdoor levels with lots of vertical action. The Fragtown maps and the Bunker maps (bk1 - bk9) are ideal. Many Action Quake2 maps play nicely using the extreme configuration too. railonly.cfg An Insta-gib railgun only config: dmflags 8208 (infinite ammo and instant items), start with railgun and 50 slugs, all other weapons banned (hence no weapons or ammo spawn on the map), bot hook navigation on, no dropped backpacks, weapons_mode 0 (only the default Q2 railgun mode), all techs spawn, no sticky grapple, no deathmatch monsters. rocketonly.cfg An Insta-gib rocket launcher only config: dmflags 8208 (infinite ammo and instant items), start with rocket laucher and 100 rockets, all other weapons banned (hence no weapons or ammo spawn on the map), bot hook navigation on, no dropped backpacks, weapons_mode 2 (ammo cost, meaning *all* the different rocket launcher firemodes are available), all techs spawn, pro-rocket enabled, no sticky grapple, no deathmatch monsters. lokoaq2.cfg I like to play Action Quake2 levels with this config file; start with body armor, random_health 1 to spawn a large health or mega health at most spawn locations, aq2_doors 1 to make doors behave like AQ2 (doors open with the opendoor command), weapons_mode 2 (cost mode), no_napalm 1 so weapon fire modes that produce flames are not available. 4.0 Known Problems ------------------ a. A few maps will not load properly using the default lOkO game configuration; the message "SZ_GetSpace : overflow" will scroll down the console when the level is attempted to be rendered on the display. Many of these maps are guilty of very high r_speeds due to huge open spaces with many game objects or "space" maps, platforms and such suspended over a trigger_hurt item. The problem is that quake2 runs into problems rendering when many game objects are "visible" to each other, ie. you can draw an imaginary line between the objects and not touch any other object or the world. The solution is to reduce the amount of game objects on the map and there a number of different ways to achieve this: 1. Set the dmflags bits for DF_CTF_NO_TECH (524288) so no techs spawn. This almost always works because you eliminate nine game objects. A less drastic solution is to ban the five lOkO techs by their respective server cvar and see if the map loads. 2. Play a game of Tag with game_tag set to 1; in this configuration no techs other than the tag tech appear in the game, a reduction of eight game objects. Also, dropped backpacks are not present on the map when playing Tag. This solution almost always works too. 3. Run an 'Insta-Gib' server, banning all weapons except the railgun (or your preferred weapon), setting the dmflags bits for DF_INFINITE_AMMO (8192), start with the railgun with start_rg 1 (or whatever), start with some slugs with start_slugs 50 (or whatever) and ban dropped backpacks with drop_backpacks 0; configured like this the only game objects the server puts on the map are techs, health, powerups and armor, no ammo or weapons are present except the raiguns dropped by fragged players. 4. Set the server cvar no_target_speaker to 1 to eliminate the target_speaker, thus loading no sounds Known maps with this problem: panzer1, endgame, ground3, resky, leray31, a few others I can't remember... b. Amazingly, there have been very few map bsp name duplications amongst the many maps available for Quake2. I've found a few, here are the versions with lOkObot supplied route files: 1492annodomini.bsp - deathmatch version supported, there's a single player version with the same bsp name unsupported. downtown.bsp - DownTown Revival - remake of DOOM map supported; there is an Action Quake2 map with the same bsp name unsupported. ecdm1.bsp - The Torture Never Stops by Cows {EC} supported; there is a map by another author with the same bsp name unsupported. meat.bsp - Pleased to meat you - supported; there is a map by another author with the same bsp name unsupported. ruins.bsp - The Ruins of Ascenzia - supported; there is an Action Quake2 map with same bsp name unsupported. vertigo.bsp - Ziggurat Vertigo - remake of Quake 1 map supported; there is another quake2 map with the same bsp name unsupported. ktdm1.bsp, ktdm2, ..., ktdm8.bsp: these great maps have been released numerous times, once as a pak file with eight maps and then as seperate maps. When released seperately the names of some of the map bsp names got scambled, ie. a map released in the pak file had a bsp name of ktdm6.bsp was released with a bsp name of ktdm5.bsp. The maps supported by the lOkO bot are named as released in the eight map pak file. bfgforever by sven - there are at least two versions released of this map; the main area of the maps are identical but the "back rooms" differ, one release has ladders in the "back rooms" and another release has stairways; the loko bot supports the stairways version. c. Occasionally a monster sidekick will enter a "zombie" state and walk around the map unaware of any players and not take any damage; I think this only occurs when a player/bot spawns a monster sidekick and the player/bot is fragged in the same game frame. The monster is harmless and won't attack anyone; eventually it will just explode. d. On rare occasions the machinegun trigger freezes in the fire position and you can't stop firing or switch weapons until you've used all the bullets in your inventory. WTF, I haven't found the offending code yet. e. When using the ycam (third person perspective) the CTF grapple cable is rendered starting from the position of the camera rather than starting from the position of the player model being viewed by the ycam; the off-hand hook is drawn correctly starting from the player model, however. Weird ... f. On rare occasions a bot may defy gravity for a few seconds trying to reach a jump node. 5.0 Tips and Tricks ------------------- a. If you are running the lOkO mod on low end hardware there are a number of methods to improve performance by limiting memory use, lowering cpu usage and improving rendering speeds: 1. Play on small maps; less items, less players and less for the game game engine to render. There are tons of levels where 4 or 5 players is optimal. Also, stay away from maps with huge open areas with high r_speeds. 2. Limit the number of different player models used by bots/players in the game. Each different player model used uses a chunk of memory, the game will use less memory and run faster if you use one player model and 5 different skins rather than using two or more player models. 3. Many player models come with their own set of sounds, which can consume much memory. Try to avoid these and use player models that use common sound files, ie. the supermale, actionmale, marine, messiah and other player models use the default player sounds of the id male model, the crakhor and other models of the fairer sex use the default player sounds of the id female model. Using different models that use a common player sound set will lessen memory requirements. 4. Set the maxclients server cvar as low as possible. The maxclients cvar specifies the max number of players and bots allowed to connect to the server and reserves a large chunk of memory when the server starts to store client data; the higher the value of maxclients the larger the chunk of memory reserved for player data. If you never play against more than 7 players and bots then setting maxclients to 8 will limit the memory reserved for client data to the minimium needed. If you can set it even lower then all the better. 5. Setting the rendering of shadows for game objects off will improve performance much on a machine with hardware on the borderline of usablilty. Using a lower video resolution may or may not improve performance... 6. Banning weapons and CTF techs will improve game speed as less memory is used and less objects are needed to be rendered by the game engine. Running an 'Insta-Gib' server with all but one weapon banned, all techs banned and no items on the map and no dropped packs will yield the least game memory needed and least game objects rendered on the map. 7. Set the server cvar no_target_speaker to 1 to eliminate the target_speaker items the play sounds on the map; playing the sounds uses computer resources to render the sound and the sounds use memory. When no_target_speaker is set to 1 the sounds for target_speakers are never loaded so they never consume memory. 8. Don't use deathmatch monsters, monster models and sounds use memory. b. If you have a fast cpu with alot of memory you can improve game performace a bit if you just want to play alone on your server against bots by starting a dedicated server process on your machine, starting another Quake2 process and connecting to the dedicated server on your own machine. Since the dedicated server isn't connected to a display and doesn't have to actually render anything on a display and the "remote" connection the dedicated server is hosting is really the same machine, the dedicated server only has to run the dll while the other Quake2 process connecting to it only has to render what the server tells it to render. This improves video performance a bit and the game dll zips along nicely.