NeoLemmix VGASPEC Format

The first thing to keep in mind when handling NeoLemmix VGASPECs is that there are two formats - the "old" one and the "new" one. To determine which you are dealing with, simply check how many compressed sections are in the DAT file. If there's one, it's old format. If there's two, it's new format.

New format VGASPECs are just a new-format graphic set with no objects and no more than three terrain piece. (In fact, they can have other pieces too, but these will be ignored.) The first terrain piece is the level's image. Any solid pixels in the second piece will be treated as steel areas when used in a level with autosteel enabled. Any solid pixels in the third piece will be treated as either one-way capable or one-way incapable depending on whether the level uses one-way invert or not. The second and third pieces are not supported yet in V1.34n-B, but will be supported from the next version onwards.

Old VGASPEC format in NeoLemmix is very similar to that of standard DOS Lemmings or Lemmix, so I will only explain the differences between that and NeoLemmix format here.

To learn about the standard DOS / Lemmix format, read ccexplore's documentation here. One thing to note is that he mentions the EGA palette as being 16 bytes. It's actually only 8 bytes, with the remaining 8 being of unknown purpose (but the first four of these are used in NeoLemmix VGASPECs).

NeoLemmix can use these standard DOS VGASPEC files as-is. However, NeoLemmix (and even traditional Lemmix in recent versions) supports two things that this format does not. These can either be used together, or just one or the other by itself.

  • VGASPEC images which are RGB-based instead of palette based (removing the 8-color limitation)
  • VGASPEC images with a size that isn't 960x160
Such a VGASPEC image is identified by normally-impossible values in the palette data. Specifically, in an RGB-based VGASPEC, all three bytes of the second VGA palette entry will be set to 255 (0xFF). If this is the case, then each pixel should be treated as being 18-bit instead of only 3-bits, with the first 6 bits being the red, the next 6 the green, and the next 6 the blue. There's no alpha layer; if a pixel's RGB values are 0, 0, 0 it is treated as a non-solid, transparent pixel. If the VGASPEC is still the usual 960x160 size, then the division of it into four sections is still done as normal.

In a VGASPEC of a special size, the second EGA palette entry will be set to 255 (0xFF). If this is the case, then the first four bytes of the unknown bytes give the size of the image (as two two-byte values, with the width coming first). One other change that occurs in such images is that the VGASPEC is no longer divided into four sections, but is just one large image. All other features (such as the compression) still apply. Note that it's perfectly acceptable to, for a 960x160 VGASPEC, set it as a custom-size one and specify the size as 960x160. Either way will work.

Autosteel and one-way data cannot be stored in an old-format VGASPEC. If you want these, use a new format one.


There is no data in the VGASPEC file which specifies the style's internal name (as used in the NeoLemmix 10KB LVL format). This data is specified in the NeoLemmixStyles.ini file for the NeoLemmix Editor, the SYSTEM.DAT file for a Flexi Player, or hardcoded into the EXE for all other players. There is also no data in the file which specifies the coordinates at which the VGASPEC will be placed in the level; this is specified in the level data in NeoLemmix, or automatically calculated based on the size in traditional Lemmix.