Development: Formats/S3M

From OpenMPT Wiki
Jump to: navigation, search

General information concerning the S3M file format. Variable names and hexadecimal numbers (in little-endian formats) are indicated by a monospace font.

Tracker IDs[edit]

The S3M header contains a field, Cwt/v, which is used to identify the application that was used to create the file. The following custom tracker IDs (read as little-endian hexadecimal numbers) are known to be found in the Cwt/v field:

  • 1xyy - Scream Tracker x.yy - Many other trackers, like ModPlug Tracker, disguise as Scream Tracker 3.20, so this is not a reliable way to tell if a file was really made with Scream Tracker.
  • 2xyy - Imago Orpheus x.yy
  • 3xyy - Impulse Tracker x.yy
  • 4xyy - Schism Tracker x.yy (up to Schism Tracker v0.50, later versions encode a timestamp in the version number - see Schism Tracker’s version.c)
  • 5xyy - OpenMPT x.yy
  • 6xyy - BeRoTracker x.yy
  • 7xyy - CreamTracker x.yy
  • CA00 - Camoto / libgamemusic

Note: BeRoTracker used the ID 4100 since 2004, but has switched to using the 6xyy scheme in 2012. Luckily, this version is not used by Schism Tracker, so it should still be possible to tell the two trackers apart.

Are you a tracker developer and you tracker can save S3M files? Please add your Tracker ID to this list!

Detecting other trackers[edit]

Some trackers disguise as Scream Tracker 3, but there are ways to uncover this diguise:

ModPlug Tracker[edit]

ModPlug Tracker and OpenMPT up to version identifies as Scream Tracker 3.20 in the Cwt/v field, but it puts zeroes for the special field, only ever sets flags 10 (Amiga Limits) and 40 (Fast Volume Slides), writes multiples of 16 orders, always saves channel pannings, and writes zero into the ultraclick removal field (Scream Tracker 3 always puts either 8, 12, or 16 there).

Velvet Studio[edit]

Velvet Studio also pretends to be Scream Tracker 3.20, but writes zeroes for special, ultraclick, and flags, and does not save channel pannings. It also writes a fairly recognizable LRRL pattern for the channels.

Detecting other trackers[edit]

Scream Tracker 3 supposedly only ever writes 8, 12 or 16 in the ultraclick removal field, so this could be a way to check if a file was not saved with Scream Tracker 3. However, it might be possible that this check will generate false positives, because Siren’s “The Last Ballad” looks like it was made with Scream Tracker 3, but has an ultraclick removal value of 24 (which is displayed as 12 in the GUI).