Development Logs

## Intro

In case anyone is interested on what is going on between releases, here is a development log page, where dev members(and anyone really), can post about progress or developments they are making in their respective areas.

## DrEvil

### October 4 2008

We're getting close to releasing 0.71, which is mainly a bug fix release for ET. RTCW will probably be released around the same time. More interesting than that is that I have been spending a bit of time on the new navigation system that I am experimenting with. For more information, see Navigation Mesh.

### April 28 2008

Progress has been good lately. Jaskot and crapshoot have been feeding me bugs to fix and I've been busting them out pretty quickly. Due to the sheer number of changes in the architecture of the bot, and the fact that all the goals had to be re-implemented, we've effectively had to start over in getting all the stock ET maps and some custom ones set up with good navigation and goals. Goals either work slightly differently, have additional features we want to take advantage of, or there is just a general desire to improve on them from last release.

There is also a nice selection of script goals that will come with the bot, to serve as both examples of what can be done with script goals, and to provide some nice additional functionality for the bots. The 0.66 method of making script goals is a steaming pile of crap in comparison to the new way to do it.

As of this writing we have the following script goals that will be included with the bot.

* **Airstrike** - Allows maps to configure locations that a team will attempt to perform an airstrike at.
* **AskForAmmo** - Simple script that allows a bot to use the voice macros to request ammo when low on ammo.
* **AskForHealth** - Simple script that allows a bot to use the voice macros to request health when low on health.
* **CombatMovement** - Performs some strafing and combat oriented movement during combat.
* **DeliverSupplies** - Allows Field Ops and Medics to respond to ammo/health voice macros and deliver supplies to the requester.
* **DispenseAmmo** - Updated from 0.66 allows a bot drops ammo shortly after spawn.
* **DispenseHealth** - Updated from 0.66, allows a bot drops health shortly after spawn.
* **EscortVehicle** - Updated from 0.66 with new features. Allows a vehicle to be escorted by multiple bots, each using different escort offsets.
* **Fireteam** - Simple example script that shows how a bot can be scripted to work with fireteams.
* **GrenadeTarget** - Similar to Airstrike, this goal allows bots to throw grenades at targets. Currently useful for MG42 nests, allows one to set up a safe place to lob a grenade from.
* **MountVehicle** - Updated from 0.66 vehicle mount goal, for ridable vehicles such as fueldump.
* **RideVehicle** - Updated from 0.66, used to support railgun and similar maps where the bots must ride some sort of automatic tram.
* **SelectWeapons** - New in 0.7, this script allows soldiers to more intelligently change weapons during a map. No mobile mg42 or mortar goals? No problem, they will switch to something else. No more soldiers running around with useless weapons due to lack of goal types(mg42/mortar).
* **SupplySelf** - Gives a Medic or Field Ops the know-how to give himself needed health or ammo.
* **UseSwitch** - Updated from 0.66, generic script supported switches, originally used in railgun, now more widely used in other maps such as battery.

As you can see there is plenty of script examples available in 0.7, and it should be easy to see just how much simpler the scripting is done, especially if you compare some of the 0.66 scripts to their updated counterparts. Often they will have additional functionality, and still manage to be smaller, more optimal scripts.

Special thanks to Jaskot and Crapshoot for their hard work. Most of these scripts have come from them, as have pretty much all of the navigation and map scripts. Their contributions are invaluable.

### January 28 2008

Despite looking for a new apartment on the weekends the past few weeks this weekend was probably one of the most productive bot weekends I've had.

Thanks to the efforts of Jaskot and his uncanny ability to flood me with bugs and requests(and nice and easy little test scripts that show me the problem immediately), this weekend was a good weekend as I was able to knock them out and fix them about as fast as he could give them to me. As with all big refactoring tasks, the brand new goal system is going to inevitably require some tweaks and changes to existing goals to ensure things keep working as expected, but in the end the goals are simpler, more maintainable, and often have more functionality than the goals in the <= 0.66. I've finally written a MobileMg42 goal as well, and I plan to take another stab at some decent mortar usage functionality soon too.

Also goal related, nearly all script goals have been ported to the new script goal format as well. This includes givehealth, giveammo, ridevehicle, mountvehicle, escortvehicle. Not only are the resulting scripts simpler than they were in 0.66, weighing in at fewer lines, but they are much more reliable and they can't really leave the bot in a broken state as could happen in 0.66. In addition, I took the opportunity to expand on a few of them, namely the escort and mount script. Each now has the ability to support more than 1 user, so for example in fueldump we can set up 4 or more escorts for the tank, each positioned in different slots around it.

By the end of this week I should have ported every goal that was present in 0.66(I think repair mg42 is the only one left), and a few additional ones, not to mention the existing goals that have been ported often contain better behavior than they previously did.

All in all, pending a good amount of testing and potential bug fixing, we're getting pretty close to being able to get into 'release mode' for 0.7 I guarantee that their behavior is much cooler, and scripting is much easier and more efficient with this version.

### January 7 2008

We're almost caught up to 0.66 in terms of supported functionality for 0.7, so once we do some more testing for stability and making sure all the existing maps can be completed by the bots, we should be able to put together a release in the near future. 0.7 is overall a large step up for myself and for scripters. The new goal system that treats native and script goals equally and allows them both to compete fixes the old problem of having script goals blindly override everything.

While we test and make sure everything is good I plan to update the wiki with as much information on 0.7 and 0.7 scripting as I can, including documenting the new script implemented goals that have been ported to the new system. I think you will see easily that things have been much improved over 0.66. Authoring script goals is much simpler, as is debugging what the bot is thinking thanks to the Debug Window.

### October 22 2007

I spent the weekend on porting some of the ET goals to the new goal system for the 0.7 release. Overall it is pretty easy and so far I've got the PlantExplosive, MountMg42, and BuildConstruction goals ported and working. We're going to try to work towards a soonish ET update that will get everyone up to date and using the latest goal system, which provides a huge improvement to how scripting and script goals are handled. No more editing def\_bot.gm to add hooks to various other scripts and much easier handling of the lifetime of a goal and how the script goal competes with normal goals. I plan to port the existing script goals to use the new system for the release as well, so ideally we won't lose any functionality between the current release and next one.

There's also been significant progress toward the new navigation system, but that won't be part of the update. I'll post some screens and more info soon about that.

### July 9th 2007

I took the week of the 4th of July off. I figured I could get alot of work done on the bot, and we had company. Unfortunately I spent about half of it sick, but the last few days have been pretty productive.

Just to bring everyone up to date, the release of Omni-bot 0.66 is to be the last release before the big plans of overhauling large parts of the bot code. Actually, 0.65 was to be the last release, but bug fix releases can override that, as it did here. That doesn't mean last release, period. It means I've come to a point where I need to spend some time to make large structural changes to the bot code. In this case, it will be the largest refactoring tasks done to date in Omni-bot.

The desire to do this is pushed by the difficulties of some user customization becoming more obvious over the past few releases, performance, the difficulty of expanding functionality in the code itself, and functionality that is lacking in the core of the bot in order to support some types of goals, such as for example, my desire to implement rocket jumping and concussion jumping in Fortress Forever and realizing that my path finding system has never taken into account movement capabilities only certain classes have. This has also been the limiting factor preventing an intuitive implementation of the covert ops class in Enemy Territory using disguise doors.

As a general overview, the major refactoring tasks are as follows.

* **Completely new goal system** - The old one turned out too difficult to expand, debug, and script. **[done]**
* **Completely new script goal system** - Current releases are difficult to write custom goal scripts for. There is no framework for a number of script goals to compete against each other for relevance, and this results in unpredictable and hard to debug scripts to do things like hit switches, ride vehicles, etc. This also includes drop in script goals, no longer adding a couple lines to the def\_bot.gm in order to use a script goal, just drop the script into the right folder and go. **[done]**
* **Scripting optimizations** - In 0.66 and before, many script goals required expensive looping for aiming the bot, choosing a weapon, checking proximity to a desired destination, etc. Most of this will be event based, more reliable, easier to write, easier to debug, and much more efficient in the new system. **[done]**
* **Better Debugging** - There wasn't much in the way of debugging tools available previously to see what was going on inside the bots *head*. Now there is, as the entire behavior tree can be watched for each bot in the expanded Debug Window. **[done]**
* **Navigation System** - The navigation system needs some large enhancements. It needs to be aware of movement modes needed to follow certain paths in order to support some game features. It also needs a better understanding of switches, ladders, elevators, vehicles, and a better integration with scripting to expand functionality of navigation. This is by far the most complex of the tasks, and likely the last to be taken on, and it may mean an invalidation of all current waypoint files. I may still develop and use my Auto Navigation FloodFill if I can work out some of the remaining issues with it, but the fallback is likely a new waypoint system.

After the Enemy Territory 0.66 release, I have needed to refocus my efforts on Fortress Forever, and am doing so with the first 3 of the above tasks complete, and it is already proving much easier to work with. I want to get the Fortress Forever bots as tight as possible, as well as the bot powered training scripts that we are experimenting with for the first time. In addition, we are working in parallel on trying to get a Doom3 and Quake4 version officially released soon, also using the new systems.

## Crapshoot

### October 28th 2008

0.71 for ET and RTCW has finally been released. This is a bit of a turning point for me in terms of work on the omni-bot project. Most of my time has been spent on ET and RTCW, but this will change now. Quake 4 and Doom 3 really need some attention so we can finally get them at least released. TF2 and possibly DOD:Source are also on the horizon. Since Omni-bot is a framework, it is important to shift the focus to other games. I'm pretty happy with the feature set and level of support for the currently released games. The revamped goal and script system really opens up a lot things for the community in terms of extending bot functionality.

RTCW was a bit of a unique project in that some mod enhancements were made to the game along with bot integration. Since all of the popular 1.4 mods ( osp, shrub, bani ) were closed source, it was impossible to add support for them. A lot of the more popular features of these mods have been added, but there are more things that can be added. I've decided to make the mod itself open source. It makes sense since a lot of the mod features that have been added were derived from other open source projects ( etpub, noquarter, ubersoldat, etc ). Anyone interested in contributing to the project can do so via this page: omnibot-rtcw. Others wanting the latest beta versions can find the packages there as well.

### September 17th 2008

It's been a while since the last entry and a lot of progress has been made. The release of 0.7 for ET was a big relief and freed up some time to focus on the RTCW bot. With lots of help from Agent and 420blunt, there are now 23 maps fully supported and 1 last one to finish up before release. Assuming that testing goes well, it should be released by the end of the month. Integration with S4NDMOD has been completed for the RTCW version 1.0 fans.

From a feature standpoint, this release will showcase a lot of the newer features of Omni-bot 0.7x. Extensive use of region triggers for dynamically shifting bots actions enables much more realistic game play. It allows for aggressive defensive setups while shifting the defense back before it's typically too late. Rather than relying on an objective trigger, bots can respond to enemies being in a certain region. An example is mp\_base where defensive bots will initially set up in the standard northeast tower / bridge defense. Once that defense breaks down and allies are near the north radar, they will shift to a more conservative defense until it is clear.

Another nice new feature is Paththrough. Paththrough allows for script goals to run once a bot gets to a specific waypoint. The main function of this feature is to improve how bots navigate through complex paths. It allows for things like using a switch to be part of the path rather than being an actual goal. An example is in se\_bunker\_v2 where there is an elevator that requires using a switch to call it, then a switch to move it to the desired level. With paththrough, the bot hits the first switch, waits for the elevator, hits the inside switch, and waits for the elevator to get to the next level before continuing along its path. This is all done while maintaining the original goal. Mp\_tram is another example where the bots will ride the trams to capture the checkpoint or deliver the docs. It can also be used to add special navigation commands for the bots to handle particularly difficult ladders or jumps where the bot may need to strafe jump to make it.

Dual objective support has been added via scripted defend goals. This goal basically creates a team of bots that will be on defense in maps like mp\_depot. In previous versions of Omni-bot, this wasn't really possible other than limiting specific classes for specific goal types. The ability to have balanced teams in terms of classes on offense and defense adds to the realism and improves overall game play. While this goal was initially intended just for dual objective maps, it can also be used in other map types to assign a team of bots to cover a specific area. An example being tundra\_rush\_beta where 3 offensive bots will help cover the main gate dynamite action while the rest of the team goes for the documents.

A generic user goal has been added that basically allows for routing to script goals that rely on waypoint names. It is now possible to add routing to the useswitch, airstrike, and dual objective goals. A waypointer will just need to add the ugoal nav flag to the waypoint and set up the route tables like any other routeable goal.

### June 1st 2008

It's been a busy 6 weeks since I posted last. A lot of my time has been invested in getting RTCW to a beta stage. Thirteen maps are fully waypointed and scripted. Two servers are currently running a beta version of the bot. Huge thanks to Guerna for providing one of the test servers. And a big thanks to 420Blunt for axis\_complex and mp\_sub waypoints. With some nice feedback from AG3NT, Guerna, and 420Blunt, a few bugs have been fixed, some features have been added, and some waypoint improvements have been made.

I've spent some time helping with getting Enemy Territory ready for a release. Most of my effort went into a first pass of converting existing community map scripts to 0.7 syntax. Since a lot of improvements have been made, the syntax is quite different for the map scripts. 89 map scripts needed to be updated, so this was no small task. Thankfully d00d has been able to get up to speed rather quickly and he's been working very hard on getting quite a few maps more thoroughly updated than I had time for.

We are hoping to have both games at a releasable state very soon. There are some finishing touches to be added, some script optimization and of course a lot of testing.

### April 19th 2008

After an unexpected hiatus, I am back. I have spent the last week working on getting caught up with all that has changed as well as implementing (porting from ET) goals for RTCW. Progress has been good and I am happy to report that Omnibot RTCW bots are fully functional. All objectives can be completed and all weapons are supported. Map support has begun and currently three maps are completely waypointed / scripted. The goal is to get as many maps supported as possible in a timeframe that coincides with the release of 0.7 for ET.

### July 9th 2007

Since the 0.66 release for Enemy Territory, my focus shifted to porting Omni-bot to Return to Castle Wolfenstein; the prequel to Enemy Territory. Although the games are similar in style, they have enough of a difference in gameplay that I thought it warranted it's own Omni-bot version. It's also a nice project for me to familiarize myself with the framework as the SDK's are very similar.

Work on the RTCW bot has come along nicely and it is a few minor bugs away from being caught up to the ET bot in terms of 0.7 readiness. Because the popular mods for RTCW are inactive in terms of development, it means some features will need to be added. Some features have been added already and if there is enough of a demand for a particular feature, I'll see about including it.

Porting to 0.66 is still being considered as playability would be realised sooner, but existing and pending changes for 0.7 have me prepared to wait a bit longer for it. So most likely, the focus will shift to Quake 4 since it's release (along with Doom 3) is next on the schedule.

For Quake 4, I'm working on finishing up basic waypoints and then will move on to map scripting. Specifically routing and attack / defend goals for CTF and Deadzone gameplay. The goal is to create a similar gameplay experience to online play.

Enemy Territory is still being worked on. There are still a bunch of things I'd like to do scriptwise to help enhance gameplay. Stopwatch mode in particular is one that I'll most likely focus on as it's something that isn't supported as well as it could be. After some discussions with Red Dwarf about this prior to the 0.65 release, some tools were added to help (like CountClass, CountTeam, and the extended ChangeClass), but it needs to be completed. The good news is that it's something that can be worked on in conjunction with RTCW.

## Jaskot

### Feb 1st 2008

Been a while, but a lot has been going on with Omni development. Currently I have been working on ET, getting .66 functionality and beyond working in .7. Using the new goal system, I created a goal to grenade targets, currently mounted or built mg42's, although I will soon add vehicles. Basically you set up a table in the map script calling out the goal you want MAP\_MOUNTABLE\_MG42\_blah) and an offset from the target that is safe for throwing grenades ( for example: 240, 0, 0 ) and the bot will go and toss grenades at it. I am now in the process of implementing all of the new goals and changed functionality into the official map scripts. In .7 we will be rolling out testmap, which is a way to test if the bots are capable of doing all the objectives in a waypointed and scripted map, as well as a method to capture bugs. We have been using this since .6 to test maps for release and now you will be able to submit files demonstrating bugs you find as well. Testmap is also good for testing out new goals as well. Doom3 is on back burner for now, but all official maps have been waypointed and all code updates are being propagated to it. Quake4 is also on backburner, and it still needs a bunch of official maps waypointed. RTCW was crapshoot's baby and we have been without him for some time. Code is being built against it and most ET updates benefit it as well, so it should be fairly up to date, although we don't have too many waypoint files for it. I have been doing some work for DrEvil on Fortress Forever (waypointing scripting, bug finding, etc).

### July 13th 2007

For ET, I'm looking at our Linux build to upgrade to a newer version of g++.

For Doom 3, I'm working on finishing up the base and the expansion pack wp files. I'm now down to 3 ctf maps (d3xpctf2, d3xpctf3 and d3xpctf4). I have also been doing some experimental work with bot difficulty as currently the bots are insane to battle.

For Quake4, I'm working on finishing up the base dm and the community map wp files. I'm also investigating problems with bot difficulty, but unlike Doom3, the Quake 4 bots are pathetically easy.

For RTCW, I,m working on wp files for the base maps.

In general, I have been working on some tools to place arrays of wps. I currently have a simple raw system in place, but I need to add logic for terrain and obstacles. DrEvil has implemented a selection box feature, and now groups of wps can be manipulated.