I didn't even know I could write blog articles on here, I might as well put it to use.
Feels like slow progress on the development front recently, have been working on lots of things but not really getting them finished. The one that's been taking up most of my time is creating a version of KTX that also includes the frogbots. This has taken up far more of my life than I'd like to admit, but is finally getting into a much better state.
The frogbot mod has had a long history - first written by Robert 'Frog' Field in 1997, it has had sporadic development over the years, the current version by ParboiL combining the KTeams mod & original Frogbot code. Newer editions have been released, generally adding support for more maps. They provide sufficient challenge to keep the movement/aim-challenged of us entertained, and considering how long ago they were written and the restrictions the original was under regarding CPU/memory etc, it's really quite impressive.
Play them often enough though and you'll start to notice patterns - for instance: spawning nailgun on frobodm2, they would always head up the stairs and go to secret RA, rather than down the stairs to pick up YA and high RL. This got me looking into their decision-making logic and path-finding, to see how they would work.
... I also had vague ideas about reading the demo files, interpret player positions as they moved round the map and essentially have the bots learn new maps/tactics by watching players. This turned out to be more difficult than I imagined (the bots use static routing, and half the fun of movement in QW is building up speed to make certain moves possible) but maybe in the end I'll get back to it.
Long story short... I've essentially done what ParboiL did, and ported the bots over into the standard KTX codebase, rather than KTeams. The bots are now 'proper' clients (rather than monsters that simply look like players) and so both follow the standard client physics and are antilagged as standard. This makes them more useful for offline practise as you can use cl_delay_packet and practise as usual.
I've tried to improve the bots teamplay messages - they now use weapon scripts, report when dropping backpacks, and have a very rudimentary safe/lost logic. KTX now loads .loc files to report locations, and mods can tell which players were sent to which clients, so %E can be reported correctly. (The players can generate the messages server-side now too, this could be used to implement up2's idea
in the future)
Also, the routing no longer has to be compiled into the mod, it can be read from a .bot file. This will eventually make it easier for map authors to include bot support when releasing a new map. Eventually I'd like to put the waypoint editing of earlier frogbot mods back in (see Mick's guide here
) but the basics are there just now - certainly easier to edit the file and reload the map in KTX than have to rebuild all the time.
Still a couple of bugs to work out, and a few things that are annoying me:
- check through all the built-in maps and make sure the routes are spawning correctly. Due to some differences between KTeams & KTX regarding when items are spawned & placed, it's possible an entity that was left hanging around in KTeams is removed in KTX.
- The jumping to YA on E1M2 is pretty terrible. They actually manage it better if they have an opponent nearby, as then they perform a 'combat jump', rather than a standard jump route. Need to look into this.
- Move all the hardcoded maps to text files. There's some map specific logic littered around the code as well that could do with being removed, leave it to map authors/bot enthuasts to configure.
- Convert Trinca's maps in .qc format to .bot files and double-check... I have run a small utility to do this but it has trouble with some maps. Also when it does work, some of the routing seems a little off. Need to fix up my utility and see if the other maps are affected, but for example see end, where teleports were linked to wrong destinations.
- Not happy with the way I had to remove some code in order to get the bot to move correctly, especially with hitting obstructions and "ledge backup" code, which was firing too often.
Other things I'd like to add in the future but will leave for now:
- Directional rocket jumps (currently just vertical)
- Strafe jumping (newer maps would probably require this)
- Better modelling of aim, perhaps based on actual players of different levels
- General directions rather than waypoints (think falling in the lava on end)
- Better teamplay (count strong/weak players in each zone, each zone has priority, powerup zones taking priority)
... I'm sure there's more. I'm going to try and draw a line under the first version and then get back to my other project, the demo/tournament archive website. That also grew arms and legs...
Now for the bad news: there will need to be work on ezquake required in order to run KTX, which it can't currently manage. (I have a version of ezquake that can manage this, but then we hit a really old 32 vs 64 bit PR2 problem which I also have code to change but others weren't happy with... gets a bit recursive). So when it is in releasable state I'll probably start a dev.badplace.eu server and people can play it there. I have started using it for 4v4 prac on frobodm2, and it makes a reasonable pov/end opponent, if not great.