Robo Home | Changes | Preferences | AllPages


Bot Name

Two bots: Night and Day,as a team, make:


Day extends Night, but changes the color from black to white.





What's special about it?

My first TwinDuel bot(s), and my first team. It is designed so that I only have to change a few constants and it will be able to act as a full 5v5 team. It also uses rudimentary friendly-fire avoidance, by using Line2D.Double.distSeg(Point2D.Double) and projecting the absolute bearing of bots.

How competitive is it?

The latest version looks pretty strong, but 1.0 was a bit of a flop.

How does it move?

It uses MinimumRiskMovement with several ideas taken from Shiz (namely only moving parallel to bots which I are likely to target me), but all my own code and implementation. I've also expanded on the idea somewhat, keeping track of which bots are *actually* targeting me and moving parallel to them.

How does it fire?

1.0 used a segmented PlayItForward? gun, which rebuilt 50 movements, but the recent versions use a simple GuessFactor gun, based off of Connavar, and adapted to hit non-relative movements.

How does it dodge bullets?

It randomly reverses every now and again, according to when Raiko's flattener says it should. I should probably switch to Waylander's flattener, though.

How does the TwinDuel strategy differ from one-on-one strategy?

I tried to use functions for everything, so that there are no specific cases for 2v2, 2v1, 1v2, or 1v1. The closest it comes to special casing is by segmenting its gun on the number of teammates it has.

How does it select a target to attack/avoid in melee?

It attacks bots that are:

It will only change targets if the new target's 'targetabililty' *0.9 is greater than that of the old target. This prevents thrashing.

This is a fine balance between trying to make both teammates gang up on one enemy in order to get a 2v1 advantage, and trying to shoot the easiest to hit bot in order to a) keep my energy high and b) inflict maximum damage.

What does it save between rounds and matches?

No saving between matches (TwinDuel rules), but between rounds it saves the successful GuessFactors

Where did you get the name?

They are the two swords wielded by Skilgannon in several books by David Gemmell.

Can I use your code?

Under the following terms:

What's next for your robot?

Beating LuminariousDuo and MarioBros - how I have no idea

Does it have any WhiteWhales?

LuminariousDuo and MarioBros

What other robot(s) is it based on?

None really....some of the gun stuff I double checked against Connavar, and the flattener is from Raiko, although that should change soon.

Comments, questions, feedback:

Nice name. =) Going to do one black one white like YinYang? --David Alves

If I continue with the idea, then yes, definately =). I realised it was a bit tough to fit a pattern matcher that stored data on multiple enemies, and has scan interpolation, and still fit a GF gun with scan interpolation, so I've made something that is a cross between the two: a segmented play-it-forward gun, that reconstructs the last 50 movement patterns in that set of 'bins'. I've also got an optimal radar scanning (inspired by a comment by Voidious) that scans in the direction of the enemy who was scanned the longest time ago - so it should be pretty effective for melee as well. It's got my-location sharing, which will be used for movement. Right now I'm at 1200 bytes, and all I have to add is the movement. I'm pretty sure I'll go for MinimumRiskMovement - although a special case for 1v1 at the end would be nice if I can fit it =). -- Skilgannon

            Enumeration allE = enemies.elements();
            double otherAngle = absBearing;
            int oldestScan = Integer.MAX_VALUE;
               EnemyInfo tmp = (EnemyInfo)allE.nextElement();
               if(tmp.lastScanTime < oldestScan && tmp != eInfo && tmp.isAlive && !(eInfo == currentTarget && getGunHeat() < 1)){
                  otherAngle = absoluteAngle(myLocation,tmp.location);
                  oldestScan = tmp.lastScanTime;
            setTurnRadarRight(Utils.normalRelativeAngle(otherAngle - getRadarHeadingRadians())*2);
 -- Skilgannon

I'm going away until next week wednesday....so I don't think I'll have an entry this week. Good luck, guys! -- Skilgannon

Going away again, probably until next week wednesday (again), so good luck for TwinDuel! -- Skilgannon

Robo Home | Changes | Preferences | AllPages
Edit text of this page | View other revisions
Last edited January 5, 2008 13:24 EST by Skilgannon (diff)