Grishnakh by Martin Alan Pedersen
Grishnakh is the name of an orc in The Lord of the Rings. He accompanies Ugluk's Uruk-Hai in the capture and return of the halflings. He has his own orders, however, and wants to take the halflings back to Sauron in Mordor. He guesses that one of them posesses the One Ring, and he may be able to take it for himself. In the book he is speared while running from the battle with the halflings under each arm. In the movie he is closest in deed to the orc who pursues the halflings into Fangorn, and is eventually stepped on by Treebeard.
Grishnakh reflects the highest point of my competitiveness in the Roborumble, before I decided to pare down many of the features and rewrite the movement engine. His score should be a little over the 1800 mark. He is not especially competitive in the Meleerumble.
Grishnakh has a set of proven guns for projection or statistical targeting. Performance statistics are segmented in the same way as bearing offsets, and gun selection is based on the best performing gun under the present situation. Firepower is determined prior to determining targeting, and a virtual wave is fired each round with a firing angle associated with each gun. Segmentation reduces the effectiveness of stop-n-go movement styles.
Grishnakh has a selection of movement styles to choose from. The best performing movements are selected through atrittion. Most movements augment their style with repulsive fields for walls and robots. Some do not, including my latest movement style which determines possible destinations in a hexagonal grid and iteratively projects both it's movement and the anticipated trajectories of enemy bullets. I have four tangental 'wave surfing' styles, none of which work especially well. I do not have any techniques implemented for adjusting wave surfing according to actual bullet hits. In melee I try to strike a balance between 'securing a corner and squatting' and 'moving around to avoid being targeted for long'.
Grishnakh's scanning has undergone some small revisions, mostly matters of style, but also avoiding some potential skips. The beam is really really narrow and hopefully that will scare my opponents into believing that I know what I'm doing. If the radar does lose its target (most likely due to an opponent's running into something) it will start sweeping again after a few ticks.
There are a few aspects to Grishnakh's energy conservation, but the most important is that he won't take a shot in a duel if taking the shot gives the energy advantage to his opponent.
Debugging, Statistics, and Persistence
Debugging is broken down into 'lines', 'debug', and 'exception'. Lines are sent to the console print stream. The rest is written to file due to volume.
While I take pride in Grishnakh's code being of my own design, some implementations are very close to the illustrations or suggestions of others.
Comments, questions, feedback: