Grobots was inspired by RoboWar, so it has many similarities, and RoboWar users should pick it up quickly. This is an introduction for RoboWarriors.


Although they are both about fighting robots, Grobots plays very differently from RoboWar. Some of the differences are due to the presence of reproduction, some to differences in the structure of the simulation, and some to different design goals.

  • There are usually ten sides in a round, not two or six.
  • The world is much larger — 1600 pixels square. This is enough room to run away from enemies.
  • Rounds last much longer - 18000 frames (about ten minutes).
  • Killshots are very expensive, so most fights are attrition-style.
  • There are other activities than combat. In fact, one of the reasons for combat is in order to eat the enemy.
  • Reproduction is extremely important.
  • Victory by elimination is difficult, so rounds usually last until the time limit.
  • Communication and coordination of robots is extremely important, much more than in RoboWar teams.
  • Brains are more useful for thinking than for aimloops. It is quite reasonable for a robot to stop and think for several seconds.
  • Robots have less precise control. RoboWar robots control their velocity (and therefore their position) exactly, but Grobots are prone to being pushed around by explosions, force fields and collisions. Other parameters are similarly prone to outside interference.
  • Sensors have limited range and cost energy to use.


Grobots uses a stack-based language similar to RoboTalk, but derived from Forth.

  • Values are real numbers, not integers.
  • There are a lot of vector operations.
  • There are compile-time words, for more readable conditionals and loops.
  • Return addresses go on a separate return stack, not on the argument stack. This makes parameter passing practical.
  • You can define your own variables and constants: #var name initial-value or #const name value.
  • There are vector variables, which store a pair of values. These are useful for doing geometry.
  • You can define your own operators: inc: 1 + return defines inc, so 5 inc leaves 6 on the stack. Any label may be called as an operator.
  • Reading or writing a variable takes only one instruction.
  • There are no quoted variables.
  • There are one-character suffixes to indicate variable writes and various uses of labels.
  • There are no interrupts.
  • Angles are in radians, not degrees.


Hardware access differencesEdit

  • Communication with the robot's hardware is through special operators as well as special registers. You use direction fire-blaster instead of energy fire' store.
  • Hardware operations take place at the end of the frame, not instantly as they do in RoboWar. This makes processors more useful for thinking than for aimloops — a fast processor won't speed up your sensors.
  • There is no aim register. Directional operations (like firing) take a direction parameter instead.
  • Sensors only fire when you tell them to, and the results aren't available until the next frame.

Hardware differencesEdit

  • Hardware parameters are continuously variable, rather than being limited to a few values. You can buy 144.32 points of armor if you want.
  • Weapons fire shots of a fixed size, and have a fixed reload time.
  • Rather than setting their velocity directly, robots set the velocity the engine will try to reach.
  • Collisions with robots or walls are harmless. You just bounce off.
  • Shields are entirely different: when on, they consume power regardless of whether they are hit, and reduce damage rather than blocking it entirely. The higher the power, the less damage gets through. They also prevent you from firing weapons, so they are more useful for survival than combat. (However, due to balance problems, they're not used much.)