Omni-Bot 0.6 STABLE
---------------------
Framework Improvements

    * New script defined weapon properties.
    * New file system.  Faster, more reliable, portable, and more secure.  (http://icculus.org/physfs/ )
    * Set delay execute flag on most script callbacks, to prevent crashes if trying to kick a bot from an event for example.
    * Converted entity flags to use BitField class.
    * Removed attached console.
    * Improved reliability of team/class events from interface.  7 ) Reduced bot view jerking.
    * Removed all mod weapon classes in native code.  All script driven now.
    * New assert thats supports breaking, ignore once, ignore all.
    * Updated navigation functions with better usage output.
    * All waypoints now grab the players facing by default when added.
    * Removed old broken msvc2003 project files from SDK.

Features

    * Added global callback function SelectWeapons, to allow script to control bot weapon selection.
    * Made script execution check full file path, then scripts directory, then global_scripts directory.
    * Added some simple avoidance of other bots.
    * Added ET_CLASSEX_VEHICLE_HVY script class type.  Represents vehicles damagable by heavy weapons/explosives only.  (ET)
    * Added bot script_run command, to run a script snippet from the games console.  Use  instead of .
    * Added echoTable script function.
    * New global_scripts folder can contain utility/library/global scripts that can be used or added to.
    * Added Jaymod weapon scripts for its custom weapons.
    * Replaced GetEntityKills and GetEntityScore with GetEntityStat, GetTeamStat.
    * Added fully configurable waypoint colors with waypoint_color command.
    * Added plain jump flag which forces a jump when bot gets in radius, no checks like jumpgap, jumpoffset.
    * Added global config table object for scripts to set global options like dump file/logging options.
    * Added gmAutoHealthArmorInfo class to automatically update health/armor info for script use.
    * Fixed movable waypoint initialization after mirroring.
    * Added waypoint UID to error output for movables and bad mapgoal inits.
    * Added revision command.
    * Added waypoint_viewfacing 1 command.
    * Added support for mirror command to do multiple mirrors in 1 call.
    * Added extra debug info on trigger output.
    * Changed AddSignalThread script function to optionally take a true/false for auto delete thread or not.
    * Added OnBotAutoJoin script callback for when minbots adds a bot.  Allows script control of class/name/team of bot being added.
    * Added waypoint_translate function to move all waypoints.
    * Changed autoradius to take an additional parameter to process current or all waypoints, also echoed settings used to console.
    * Added PERCEPT_FEEL_PLAYER_USE event.
    * Added reasons to all goal success/failures if goal debugging on.
    * Updated waypoint version file.  Saves movable entity Id to file(experimental).
    * Added script waypoint flag to run scripts for a waypoint when map loads.
    * Added callbacks for bots SelectTeam and SelectClass so bot scripts can choose their start team/class.
    * Improved visuals from draw_goals command.
    * Added auto facing set to all new waypoints set with bot waypoint_add.  Uses your current facing.
    * Added thread info to bot script_stats.
    * Added an external GUI with a script console, profiler output, and message log.  Enable with bot dwon
    * Added IsStuck, and ResetStuckTime script functions.
    * Added TransformVector, InverseTransformVector, Inverse functions to Matrix3 script type.(OMG MATH!)
    * Added optional 2nd param to MoveTowards, which is a distance tolerance to 1st param.  If within, function returns true.

Fixes

    * Fixed bot parsing all pk3/pk4 files in game folder.  This accounted for long load times.
    * Fixed interface forgetting weapon selections after warmup (ET).
    * Fixed team setting from event at bot spawn.
    * Fixed availability check in plant explosive goal.
    * Fixed minor logic error in command argument concatenation.
    * Fixed bug in vision system that caused target classes to be checked wrong.
    * Added bias check on call arty goals (ET).
    * Reduced .vis file size by 8x.
    * Fixed TargetBreakableDistance property to be settable at any time.
    * Rewrote debug line drawing in ET.  Draws much faster without using entities.
    * Fixed bots not releasing mount mg42 goal when made unavailable.
    * Fixed waypoint visibility being rebuilt after a waypoint delete.
    * Clear waypoint selection on radius change so it should immediately draw the updated info.
    * Removed blocked flags from goals in favor of a more reliable method of handling failed goals.
    * Fixed check to abandon ctf goals if their availability changes.
    * Fixed version command to give more meaningful information about bot version.  Remove version string from interface.
    * Removed hard coded fire in the hole voice chats from grenade throws (ET).
    * Fixed bots leaving game freeing their name for re-use.
    * Significant optimizations to entity lookups.
    * Fixed some potential crashes with bad entities for event death, event feelpain.
    * Reduced memory usage, both app and script.
    * Removed 2nd messagebox from MiniDumper.
    * Fixed a bug that could cause a corrupt .way when saving after using delete_axis.
    * Fixed touch sources giving visibility through walls.
    * Fixed feel pain script event on null entities.
    * Added optional bool to bot.GoTo Function, to append goal rather than replace goal.
    * Removed disconnect waypoint commands, made connect versions toggle, to reduce commands and supporting code.
    * Fixed ReleaseButton script function.
    * fixed bug with choosing 0 desirability goals.
    * Fixed bug where minbot added bot would have null name.
    * Fixed potential memory leak with script threads sticking around when bot is kicked.
    * Fixed bots aiming at targets when their weapon shooting is disabled.
    * Fixed weapon_fire script event to pass weapon.
    * Fixed potential crashes in triggerinfo accessors.
    * Fixed saving of waypoint properties.
    * Fixed a problem where some mg42s might not get registered as goals(ET radar).
    * Removed Panzerfaust and Aistrike waypoint commands( they werent implemented at all )
    * Significantly improved goal detection by caching position, facing, bounds.  Some goals would get screwed bounds.  (dual team objectives).
    * Updated position of health entity in the GetHealth goal.
    * Fixed goal flipping for CTF and Snipe goal.
    * Raised height for blockable wall check.
    * Fixed PostRecord parameter ordering.
    * Merged a critical bug fix from Game Monkey Script.
    * Fixed script command SelectBestWeapon.
    * Improved debug line drawing significantly.
    * Artificially bloated up map extents in ET interface by 2x(game has it wrong for some reason, wtf?)
    * Heavily reduced script memory usage of GameEntity types.  Now can also use them as table keys in script.
    * Fixed a crash with auto health and armor script type.
    * Improved Stuck detection.
    * Added capability to compare gameentities to game ids for equality and non equality.

Misc

    * Game Monkey Script Remote Debugger!

New Bot Script Functions

    * IgnoreTarget
    * GetWeapon
    * SetGoalProperty
    * IsStuck
    * ResetStuckTime
    * ReleaseButton
    * SetDesiredFacing
    * DumpBotTable
    * EnableItemUse
    * IsWeaponCharged
    * AddSignalThread
    * RemoveSignalThread

New Global Script Functions

    * EnableDebugWindow
    * EnableScriptDebug
    * SetBiasGoals
    * DrawDebugAABB
    * GetMapExtents
    * GetGameTimeLeft
    * GetEntName
    * GetEntBonePosition
    * GetEntEyePosition
    * GetEntRotationMatrix
    * GetEntClass
    * DistanceBetween
    * CalcTrajectory
    * GetEntityLocalSpace
    * GetEntityWorldSpace
    * ExecCommandOnClient
    * GetEntityStat
    * GetTeamStat
    * GetGameName
    * GetModName
    * GetModVersion

Waypoint Script Functions - These functions are grouped under a global Wp table.

    * IsWaypointViewOn
    * AddWaypoint
    * DeleteWaypoint
    * SetWaypointName
    * GetWaypointByName
    * GetWaypointByGUID
    * SetWaypointFlag
    * SetTopWaypointOffset
    * SetBottomWaypointOffset
    * SetTopPathOffset
    * SetBottomPathOffset
    * SetBlockablePathOffset
    * SetFacingOffset
    * WaypointColor

NavMesh Script Functions - These functions are grouped under a global Nav table.

    * EnableView
    * EnableViewConnection
    * EnableStep
    * Step
    * AddFloodStart
    * ClearFloodStarts
    * SaveFloodStarts
    * LoadFloodStarts
    * TrimSectors
    * FloodFill

------------------------------------------------------------------------

Weapon Scripts

In the name of flexibility and customization, the way weapons are defined has been moved entirely from C++ code to scripts. In the process it recieved a good number of extra features and capabilities that make it much improved over the pre 0.6 system. You might notice now, that there is a weapons folder under the scripts folder that holds weapon scripts for each weapon in the game. These scripts define all the relevant properties of each weapon, which basically allows the bot to use the weapon. More information about weapon scripts will be available in a seperate article.

New File System

Omni-bot now uses a new file system based on http://icculus.org/physfs/ It offers a more secure, reliable, and cross platform method of file IO. Script bindings are available to allow file reading and writing from scripts, however for security reasons they are limited to a 'user' directory under the installations game directory.

Improved Drawing of lines in ET

Long term issues of being unable to draw enough lines in ET have driven me to rewrite the drawing method in order to better support smoother and more reliable line drawing. In the new drawing system, the bot has been set up to communicate directly to the client dll through shared memory with its drawing requests. This results in a much smoother and more reliable method that isn't at all dependent on the max number of game entities. Unfortunately though, there still exists a limit to the number of lines the client is capable of drawing, though it's generally plenty for most cases.

------------------------------------------------------------------------

Omni-Bot 0.532 STABLE
---------------------
Fixed dump file generation on every shutdown of bot library.

Omni-Bot 0.531 STABLE
---------------------
Fixed a bug that caused subtle navigation problems, including frequently failed paths

Omni-Bot 0.53 STABLE
--------------------
Fixed a crash if no goals were usable.
Fixed a crash if the bot didn't have a valid current weapon.
Fixed a crash if script accessed null values in trigger infos.
Added ClearWatchEntity script function.
Added OnBotAutoJoin script callback for controlling bot setup for auto added bots(minbots/maxbots)
Removed messagebox on crashes, dmp file saved automatically now.
Added bot script callback SelectTeam and SelectClass that is called when a bot is added with a non specified team and/or class.
Removed etpub from installer.
Removed some stray debug line drawing that could cause clients to error with Unknown Event: 131

Omni-Bot 0.52 STABLE
--------------------
Fixed crash with certain maps(baserace, et_ice)
Added small offset to health/ammo/armor pickup offset

Omni-Bot 0.52 Beta 6
--------------------
Fixed MESSAGE_DEATH and MESSAGE_KILLEDSOMEONE source parameter.
Fixed waypoint_addflag functions to optionally take multiple flags
Fixed GetCursorHint return value
Fixed waypoint_autobuild parameters(disconnect param)
Fixed unable to default construct a script type
Added bot function ResetSubGoals to script
Added command waypoint_mirror, which copies all waypoints and rotates around an axis. Useful for symmetric maps.
Added GetBotVersion which returns the numeric version of the bot, for optional versioning scripts.

Omni-Bot 0.52 Beta 5
--------------------
Fixed about 4 crash bugs
Fixed vehicles not being registered if health == 0
Added bot.HoldButton() script command, allowing an easy way to make a bot hold a button down for a time period.
Added a difficulty script, which registers a command /bot difficulty ?, where ? is the difficulty number or name. Additional difficulties can be added, changed in the script.
Added script library giving basic File IO.
Added goal registration for dropped items, so dropped flags will be registered as goals under the name allies_flag, or axis_flag, and giving them the ability to go for dropped flags.
Added mini-dump support to windows version. Should create a .dmp that can be sent to me for debugging crashes.
Added optional filename parameter to /bot show_goals command, which will dump all the names to a given file, eg /bot show_goals goals.txt
Vehicle entities are registered as goals, allowing scripts to implement escort goals and such.
Changed PressButton function to take multiple buttons as seperate parameters, instead of the user having to | them together.
Changed parameters of /bot commands so they are passed to script as appropriate types.(previously were all strings)

This release focused on stability for the most part. It should be much more stable than previous versions, including the last stable version. There were several bugs in the scripting system which the author helped to track down and fix.

Omni-Bot 0.52 Beta 4
--------------------
Optimized some stuff
Major refactoring of internal code to simplify further development.
Added /bot dontshoot 1/0
Fixed setting goal properties.
Fixed naming of axis goals in some maps. This may break existing scripts.
Changed first person spectator debug output to be disabled by default. Can re-enable with debugbot command
Changed syntax for debugbot command
changed waypoint_clearallflags to take flag names to clear specific flags from all waypoints.

Not a whole lot of things that are new with this beta, since most of it was internal optimizations and refactoring, and a few fixes.

Omni-Bot 0.52 beta 3
Saturday Jan 14, 2006
--------------------
Added omnibot_enable cvar. Defaults to 1
Added radius check for panzerfaust and flamethrower weapon for friendlies
Added bot script functions HasLineOfSightTo & InFieldOfView
Added drawthreats command to highlight detected threats in red
Added line of sight test to artillery target positions
Added script command GetCursorHint
Added script command ChangeSpawnPoint
Added PERCEPT_HEAR_CHATMSG event for chat messages
Added script function GetEntVelocity
Added example script that allows bots to get in mountable vehicles
Added a number of Math functions for scripting: RandFloat, RandInt, ASin, ACos, ATan, ToInt, Abs, Sqrt, Min, Max, Floor, Ceil, Round
Fixed bridge blockable detection, was swapped
Fixed removing single connections
Fixed bots defusing
Fixed an aiming bug that caused bots forward to get set to ZERO
Fixed output of script_stats

Omni-Bot 0.52 beta 2
Thursday Jan 5, 2006
--------------------
Added a goal highlighting feature to help scripters. /bot draw_goals [1/0]
Added some intelligence that limits the # of bots that can take on a specific goal. Scriptable too
Added randomization of goals that have the same bias, eliminating order dependency.
Added cvar g_omnibotpath that allows users to specify the folder to look for the bot dll.
Added entity flag LIMBO and MOUNTABLE. Exposed to script.
Added covert ops satchel usage agains appropriate targets(auto detected).
Added exposed many goal properties to script. See the sample.gm for examples.
Added version checking in the bot interface to give error messages when using wrong bot dll with game.
Added all goals now are sorted and distributed by their goal bias. More bias means bots will go after them first.
Added WEAPON_FIRE event. Sent any time bots weapon fires. _param.projectile is a projectile for appropriate weapons.
Added camp timer in attack/defend goals.
Added CHAT_MSG event. Whenever the bot recieves a text chat message. _params.msg is the string that was said.
Added waypoint command - waypoint_biconnect and waypoint_bidisconnect.  Same as normal connect/disconnect except it does it both ways in 1 step.
Added extra parameters to waypoint_autoradius command for added flexibility.
Fixed attack goal name.
Fixed bug where reload checks would change weapons, potentially messing with goals or scripts.
Fixed blockable collision test to be more reliable(was missing the tank barriers in goldrush).
Fixed bots always running to a goal that has been completed en-route. Auto success.
Fixed bug that prevented multiple goal flags to be usable on 1 waypoint.
*Fixed bot aiming at close range targets.
**Fixed bug in Aim calculations - IMPORTANT SEE BELOW
Changed bot scripts. Eliminated auto creation of weapon tables. Saves a bit of memory.
Change the bot chat function Say and SayTeam to take any number of parameters and types.

*Previously the bots aim tolerance represented an angular value the bots aim vector would have to be within in order
for the bot to be allowed to start shooting. This causes problems in close combat, where it is harder for the bot to
maintain an aim vector within that tolerance with horizontally moving targets. For this reason, the AimTolerance property of the bot has been revamped. Now, instead of an angular value of a few degrees(default 3 previously), the value now represents a radius of a sphere that the bot has to be aiming within in order to be within his tolerance. This improves close quarter combat by giving a wider range that more accurately represends the closer targets screen presence. This should improve the bots close quarter target tracking/firing. Due to this change, all previous AimPersistant values within scripts need to be updated or the bots will likely behave oddly and have trouble firing. See the main bot scripts sample.gm and def_bot.gm for those values.

**There was a bug in the previous aim calculations that made the bots aiming non time-based. This means anyone running sv_fps greater than 20(the default) would have had bots that turn much faster than intended. This has been fixed. Unfortunately a side effect of this fix is that it invalidates ALL previous aim values, so scripts need to be updated to the correct values. See the main bot scripts sample.gm and def_bot.gm for those values.

Omni-Bot 0.51 beta
Thursday December 1, 2005
--------------------
Updated for etpub 0.6.3
Updated for Jaymod. Next beta should support this bot version
Added AimTolerance option for scripting.
Added EVENT.DEATH and EVENT.KILLEDSOMEONE to script.
Added EVENT.DEATH example callback to def_bot.gm.
Added health_goal.gm and disguise_goal.gm example scripts.
Added satchel_goal.gm example script. Example usage in oasis.gm
Added TargetBreakableDist bot property for the distance a bot can target a breakable.
Added OnBotJoin and OnBotLeave global script callbacks. Example usage in Radar.gm.
Added bounding box highlighting of game entities when waypoint mode is on.
Added Utilities.gm, with useful script snippets.
Added example command to et_autoexec.gm that implements a 20 second auto save when waypointing.
Added artillery goal. Implemented with 3 waypoints. See waypoint article
Added ET specific script function "GetGameState"
Added ET specific bot script functions, PickNewPrimaryWeapon, GetReinforceTime, IsWeaponCharged
Added defend goal. Simple implementation currently. Basically a camp location.
Added bots call artillery on vehicles.
Added bot property AimAdjustDelayMin and AimAdjustDelayMax. *
Added corpse recognition. See disguise_goal.gm for an example.
Added bot GetAllType function that gets all targets matching a category and/or class.
Added numerous additional script functions.
Added ET specific entity flags DISGUISED, CARRYINGOAL, MOUNTED
Added ExecCommand to allow execution of bot commands from script.
Fixed EVENT.SPAWNED sometimes not being sent on the first spawn after warmup.
Fixed camp timer for mg42 goals.
Fixed on-screen goal text when spectating a bot.
Fixed MaxViewDistance bot property.
Fixed reduced alot of waypoint mode stutter.
Fixed removed necessity for wall flag on both ends of a blockable. Should work with 1 now too.
Fixed goals should get fail signals if the bot is killed.
Fixed memory leak during waypoint mode.
Changed bot aim behavior*
Changed default memory span to 2 seconds.
Changed default distance for breakable objects to 0 so bots ignore breakables by default.
Changed script entity functions to global functions that can take an entity or gameId.
Changed door goals so the bot only 'uses' if a raycast fails. Improves hatch usage.
Changed /bot come functions to take an optional # for the gameId of the bot. Without specifying, defaults to all bots
Changed /bot roam the same way
Changed goto goal to go to the nearest waypoint, not the actual position. Improves several other issues.
Changed script AimError from Vector3 to Vector2 for clarity. x = horizontal, y = vertical.*
Changed removed hard coded voice chat messages(hi, bye, class announce) Script em if you want em.

*The bot aiming behavior has been changed for this release, specifically by implementing a clearer influence of aimerror on the bots aiming. Among these changes are the following.

NOTE: I didn't remove the movable waypoint from this release, despite it being not finished. I recommend NOT using it though unless you just want to toy with it.

Aim Tweaks
----------
AimError is now a 2d vector, representing x(horizontal), and y(vertical) aim error.
The AimError represents a random offset from the targets position to aim for.
This offset is a random value between -AimError.x to +AimError.x horizontally, and -AimError.y to +AimError.y vertically.
The random offset is re-calculated at a random time between AimAdjustDelayMin and AimAdjustDelayMax, which default to 0.0 and 2.0 seconds.
AimAdjustDelayMin and AimAdjustDelayMax can be tweaked by the user from script.

This will allow users to more easily tweak the bots aim to a more acceptable level.

Omni-Bot 0.4 beta
Tuesday November 1, 2005
--------------------
Added a ton more script functions.
Added map extents to waypoint header.
Added version 5 waypoint file format.
Added waypoint_addflagx command.
Added ability to add custom functions through scripts.
Added auto detected 'flag' goal type for carryable goals such as the radar parts in radar, or gold in goldrush.
Added cappoint waypoint flag, used as destination point for flag goals.
Added sample.gm script, heavily documented as a demonstration script.
Added movable waypoint flag(not implemented yet).
Fixed bug where bots picked wrong class after warmup expired.
Fixed long load times due to vis table calculation. Vis tables now written to file to prevent re-calculation.
Fixed numerous crashes.
Fixed bug where large maps could still run out of entities.
Fixed crash when deleting a waypoint if it was marked to be connected.
Fixed crash bug where a bot could still have evaluators for class.
Fixed default profile usage.
Fixed MG42 goal so bots dont fire at unoccupied mg42s.
Fixed waypoint archive loading.
Fixed bot sprinting for sprint waypoints.
Fixed ET class choosing.
Fixed revive goals if target is in water.
Fixed goal scripting.
Changed goal names to use a unique waypoint Id, rather than an ever increasing number. This should ensure constant goal names for scripts.
Changed bot scripting. Huge improvements.
Changed names that most goal types use. Should now be more unique(but not always).
Changed(got rid of) the goal thread related functions in script, in favor of using gm threads.
Changed internal function _GetClosestWaypoint to no longer use line of sight tests. Fixes many nav issues.
Changed breakable targets to be limited to very close(300 units) distance.
Changed weapon desirabilities versus some target types such as breakables. Should no longer use panzers/flamers/etc... against breakables.
Changed bot script callbacks to take table, which has event dependant data.
Changed A* path planner. Increased performance by 20%
Updated waypoint files.
Updated script files.

Omni-Bot 0.31 beta
Tuesday August 23, 2005
--------------------
Updated nav files.
Improved how bots handle "badly" waypointed maps.
Reduced voice chat usage for grenades.
Fixed duplicate bot names.
Fixed minbots/maxbots.

Omni-Bot 0.3 beta
Wednesday August 17, 2005
--------------------
Added mobile MG42 goal for soldiers.
Added bots can be fooled by disguised CovertOps now.
Added map scripting(triggers).
Fixed AI related causes of the "bots do nothing" error.
Changed parameter order of addbot command.
Improved bot grenade handling.

Omni-Bot 0.231 beta
Sunday July 31, 2005
--------------------
Fixed another invisible waypoint bug.
Fixed bots shooting at unbuilt MG42s
Fixed maps crashing with "G_Spawn: no free entities" error
Tweaked aiming a bit

Omni-Bot 0.23 beta
Saturday July 23, 2005
--------------------
Added ShowFunctions() script command
Added inwater, underwater waypoint flags.
Added buttons drop, leanleft, leanright, aim
Added inwater, underwater entity flag
Added contents enumeration
Added visual feedback to status of blockable paths in waypoint mode
Added waypoint_move command to move existing waypoints, preserving connections
Added waterblockable waypoint flag 
Added waypoint_clearflags to clear all flags from current Waypoint
Added blockable list rebuild on waypoint_save
Added waypoint_add automatically detect if its in water.
Added bots respond to medic and ammo requests
Added bots throw smoke markers(air strikes) at vehicles
Added mount mg42 map goal, auto detected
Added Prone waypoint tag and bot ability
Fixed ET sniper goal choose random instead of closest Goal
Fixed bots allowed to shoot while waiting at cabinets
Fixed bots looking at ground while at health/ammo cabinets
Changed ET sniper goal obey crouch/prone flags on target Waypoint

Omni-Bot 0.22 beta
Monday June 27, 2005
--------------------
Fixed engineer saying "I'm a medic"
Linux version now runs on glibc-2.2

Omni-Bot 0.21 beta
Friday June 24, 2005
--------------------
Greatly reduced voice macro spam of "I'm taking fire"
Fixed jumplow and jumpgap flag in ET due to improper implementation of getting player bounding box.
Improved jumplow handling