From Robowiki
Jump to navigation Jump to search
Author(s) Rednaxela
Extends TeamRobot
Targeting Circular Targeting
Movement Aggressive
Current Version 1.4a

Background Information

What's special about it?
Well, the fact that it's a highly competitive TwinDuel team, without using any advanced targeting or dodging. It's also the only TwinDuel team I know of that only has one robot that scans. Additionally, I coded the first release in less than a 36 hour period which was refreshing :)
How competitive is it?
Well, in its first TwinDuel it won every single match, most by a large margin. I'd call that very competitive.


How does it move?
Attempts to surround the enemy to pin them, no dodging at all. For now I won't explain exactly how this works, but it shouldn't be too hard to tell from reading the code or observing it in action.
How does it fire?
Simple Circular Targeting including wall collision handling. They often seem to hit each other when missing the enemy but still they do well...
How does it dodge bullets?
It doesn't. In fact its aggressive movement makes it very easy to hit, not that I care ;)
How does it select a target to attack/avoid?
It targets the enemy leader first, and when that's gone it targets other enemies.
What does it save between rounds and matches?
There's nothing to save, it doesn't learn. In fact it's nearly perceptual. :)

Additional Information

Where did you get the name?
I was pondering tactics of surrounding and causing one enemy to hit the other, which led to pondering close orbiting, which led to me thinking about moons, and thus they're the LunarTwins.
As far as the individual bots, well LunarLeader was obvious and I liked the rhythm of it, and LunarRover is just cool and represents that bot just going where it's told :)
Can I use your code?
It's in the jar, but you probably don't want to touch this mess. If you really want to use code from it though, ask me.
What's next for your robot?
  • Find ways to reduce code size without removing features or making it unreadable (not that it isn't already unreadable...)
  • Possibly add a special movement case for LunarLeader when it has lost LunarRover, which would be more evasive.
  • Consider making LunarRover not a droid so it can be less helpless in LunarLeader's absence. Not sure this is worth it though
  • See if movement can be improved by keeping tabs on the other enemy
Does it have any White Whales?
Well, 1.1a had troubles against GeminiTeam. The new 1.2 release seems to fare a little better...
What other robot(s) is it based on?
Well, it shares a little utility code from my unreleased monster Gwynfor. Besides that? All from scratch. Can't even give credit for GuessFactor or Wave Surfing technology as I don't use those here.

Version History


  • Initial Release, though it never saw the official TwinDuel field
  • LunarLeader used CircularTargeting while LunarRover used HeadOnTargeting


  • Fixed an issue that would make skipped turns cause errors
  • Switched LunarRover to CircularTargeting too
  • Uncommented a line that made LunarLeader ensure it's goal points are inside the battlefield. It commented out in testing and I forgot to uncomment it in 0.1
  • Made the angular velocity of the enemy a rolling average


  • Last release until it actually sees the official TwinDuel field
  • Cut 100 to 200 CodeSize from the RelativePoint class
  • Add logic to go for the other team's leader first, as that seems somewhat beneficial


  • I lied, one more release
  • Improve logic to go for the enemy's leader first
  • Decide bulletpower based on the distance to the enemy
  • Move relative to their predicted location next tick instead of relative to the scanned location


  • Lots of changes to get CodeSize reduced all the way to 1627
  • Some minor bugfixes for corner cases (which apparently was some kind of PerformanceEnhancingBug... gah... not that fixing it hurt performance that much)
  • Behavior is identical to 1.1 except for that very minor PerformanceEnhancingBug


  • Tweaked goalpoint selection a bit (which cost a whole ~300 codesize...)