I learned to program in the late nineties through a game called RoboWar. RoboWar provides a simulated arena in which two virtual robots try to destroy each other by running a program written by their respective players. The goal was to create a robot which could win a tournament, which were held about twice a year; entrants would email their creation to someone with a fast computer who would simulate hundreds of battles and then let everyone know who had won and make the entries public.

The RoboWar program is demo’ed in the screencast above. Before programming your robot in the Drafting Board, you first went to the Hardware Store, where you could allocate your 9 Hardware Points to equip your robot with armor and shields (damage points or dp), energy (or e), a processor and some weapons. In a fight, your robot was destroyed when it had no armor left, but could use energy to power a shield to protect itself. It also used energy to fire projectiles at its enemies. The more energy in a shot, the more damage it did.

More details:

  • the simulation moved forward in timesteps called chronons
  • energy recharged at 2e/chronon
  • processor speed controlled how many program instructions were executed per chronon (the maximum was 50 instructions/chronon)
  • any action i.e. changing speed, firing, powering shields etc involved setting a variable, which took at least 3 instructions
  • 1e invested in shields counted for 1dp of protection
  • 1e invested in a bullet counted for 1dp of damage on impact, but twice that for missiles
  • missiles travelled at a speed of 5 px/chronon and bullets at 12 px/chronon
  • it cost 1 energy to change speed by 1 px/chronon, and the max speed was roughly 20 px/chronon
  • a robot could go into negative energy (down to -200e) during which time its processor speed went down to 0 instructions/chronon

These hardware values ended up being very well-balanced (they were tweaked repeatedly over 15 years) in that they permitted a wide range of robot hardware configurations and strategies, and a taxonomy of robot types was developed with names such as Wall-Huggers, Corner-Hoppers, Machine-Gunners, Dashers and Stun-Streamers.

As a player, you could also be aesthetically creative by giving your robot some icons in the Icon Factory and sounds in the Recording Studio, and then programming it to switch to various icons and play sounds during the fight. Tournaments included special subjective prizes for these.

Working on a tournament entry was stressful, because tournament hopefuls only had access to the previous tournament’s entries, but could only guess at what the others were thinking. Even if you built a robot which could beat all of the entries in the previous tournament, that gave no guarantee that you would win the next one because presumably everyone else would submit such a robot.

Here is the history of RoboWar as I remember it and participated in it. RoboWar was developed by a Stanford student in the 1989-1992 timeframe and originally played with his friends. It diffused across the early Internet via floppy disks and collections of shareware, and was eventually open-sourced. It originally ran only on Macintosh computers, which somewhat limited the growth of its community. I was introduced to RoboWar by a classmate Adam in the early days of the web, around the 1995, right after the Tenth Tournament (T10). Adam and I entered T11 in the spring of 1996 in the team division with a pair of robots called the Cyber Hunters, which didn’t do very well.

In an effort to be in contact with the community more often than twice a year, I decided to create a RoboWar mailing list (which I had been surprised to find did not exist). I did this by manually extracting the email addresses from any web page I could find which mentioned RoboWar, as well as from every previous tournament entry. With the innocence of a 13 year old with his first email account, I then emailed everyone in cc to announce the happy news that they were now on an exciting mailing list and that they just had to Reply-All to email the list. Predictably, I quickly received some strongly-worded complaints from people who didn’t want to be on this mailing list. My well-intentioned response was that from here on in, every time this happened, the next person to Reply-All should just remove that address from the cc list before hitting send!

Things eventually settled down when the original author of RoboWar, who had access to a proper majordomo mailing list server, set up a standard mailing list where people could control whether or not they were signed up and thereafter the RoboWar community had a central place to discuss the finer points of robot design. This mailing list (whose descendent still exists today) eventually gave rise to a second type of tournament called King of the Hill (KOTH) wherein one member of the community (who happened to be me, for a little while) would manage a persistent “hill” of 20 or so robots, and whenever someone emailed them an entry, a tournament would be run and the last robot in the standings would be eliminated. The catch was that the entrants to the KOTH tournament would never be released publicly (you only knew their names), which meant that you could get a sense of how well your robot was doing against some subset of the likely composition of the next tournament, but you wouldn’t know why it was scoring the way it was.

During this period, I developed a couple of tournament entries (Commandante for T16 and Hyoga for T17 ), neither of which was revolutionary, but whose development laid the foundations for my career in software engineering, so I guess I can’t complain. My friend Adam was more prolific, entering every tournament between T11 and T18 and placing a few times.

This trip-down-memory-lane of a blog post came about because I recently thought about RoboWar and decided to see if I could still run it for old times’ sake. I then got caught up in a few evenings of trying to find old binaries and a legacy MacOS 9 emulator to run them. As it happens, I got this urge while Sourceforge was having an outage which meant that the old tournament archives were unavailable, so I decided to host my two tournament entries on Github, and keep my own copy of the binaries safe in my archives. I’ve archived a detailed history of RoboWar tournaments and the History section of the RoboWar instruction manual here as well, for the curious.

© Nicolas Kruchten 2010-2022