laurence dougal myers

The Adventures of Robin Hood is a game released in 1992, developed by Millenium. It was programmed by Steve Grand, who later went on to create the popular Creatures sim series.


A scene from the introduction sequence of The Adventures of Robin Hood

Robin Hood could be considered one of the first world sims, populated by independent characters, one of which you have some control over (Robin Hood, of course). The gameplay is entirely non-linear, with multiple paths to completion.

I am investigating how to write a modern engine or interpreter for Robin Hood and its successor, Rome: Pathway to Power (aka Rome: AD92), with a path to creating new adventures.

Robin Hood is based on a rules engine/interpreter called Microcosm, which Steve Grand originally created for some educational titles many years earlier. I asked Steve on his blog if he had any source code available, and unfortunately it seemed unlikely, but he did describe Microcosm's non-linear behaviour as follows:

... in Microcosm that simply translates into producing a DATABASE of IF/THEN statements, instead of the tree structure that would occur in normal code (normal code looks like: “IF A THEN (IF B THEN (…)) ELSE IF C…” – lots of brackets, creating a tree). So a Microcosm rulebase is a long list of completely independent IF/THEN statements, ALL of which are tested every tick of the system clock. Say one of the rules is “If A and B and C and D are true, then do E and F and G”. And say that doing G changes the external or internal environment of a character in some way. Now a different rule (which could be anywhere in the rulebase) might get triggered next tick. It doesn’t matter how the game got to that point.

Interesting stuff! It would probably be a lot easier to write it from scratch, but since we're trying to support the existing games it's going to tricky.

Robin Hood Sprites

There are some quirks, of course. Some of the image data is hardcoded in the game's executeable, such as a "default" palette, and the expected file sizes for each image. Most .GFX files store the image's palette at the start of the file, except for CUBES0.GFX to CUBES3.GFX, which use the default palette. All .VGA files use the default palette.

The compressed images do not seem to contain all the pixels in the uncompressed image; all backgrounds come up one pixel short, and the sprite sheets are missing a few more pixels. I have assumed that the game just fills in missing pixels with 0x00, which seems to match the observed output (check the first screenshot - the very bottom right pixel is black, when the surrounding pixels are dark green).

Robin Hood Isometric Tiles

Here's some boring information about the image files:


  • MEN.VGA and MEN2.VGA are 16 pixels wide, 3840 pixels tall. These files contain the character sprites.
  • IDEOGRAM.VGA is 16 pixels wide, 1600 pixels tall. This contains the action icons and UI elements.
  • ISOCHARS.VGA is 4 pixels wide, 1024 pixels tall. This contains the font used for in-game dialogue.
  • CUBES0.GFX to CUBES3.GFX are all 32 pixels wide, 1920 pixels tall, and contain the isometric tiles (cubes) for each season in the game.
  • All other .GFX files are 320x240, and are background images.

Here is my simple decoder script. It works for all Robin Hood images, and from a quick test it can decode at least the backgrounds from Rome. I have included the hardcoded "default" palette, in both VGA and RGB formats.

Robin Hood Image Decoder (Python Script) (2009-07-22)

Next task... RULES.PRG!