SCUMM Revisited
Last update: Sunday, September 02, 2001

Hosted by:
| Lucas Arts Adventure Super site |
----

Main
News
SR3
Warning
Features
FAQ
History
Download
Forum
Secrets
Articles
Specs
Thanks
Help
Links

Community
| |
----

Size Formats

If you have read some of the specifications of SCUMM blocks, you'll notice that they don't all include their size in the same way. In order to find the next block when analyzing (and in order to dump to files and process blocks correctly) SCUMM Revisited has to know the size of the current one. Thus, it needs to know the size format of each block. Just for those interested in internal stuff, here is a list of the different size formats used by SCUMM - and SCUMM Revisited:

Standard: The format I have chosen to call "Standard" is the one most commonly used in blocks for newer SCUMM games. All of these blocks start with four characters containing the block type (e.g. "LECF") followed by four bytes containing the size in little endian format (e.g. 00 01 32 2F - a size of 78383 bytes). These eight bytes are included in the size.

Name and Size not Included: This format is almost the same as the Standard format. The only difference is that here, the eight bytes containing the block type and size are not included in the size. So to get the correct size of the block we add 8.

Name and Size not Included - Inconsistent: This format is the same as the one described right above, except that sometimes this block has one more byte than the size says.

Undefined - Based on Parent or Filesize: Some blocks do not contain any useable size information at all. An example is the Creative Voice File blocks. Creative Voice Files (.voc) do not contain any information on their own size, which is probably why LEC placed those files within a wrapper block named VTLK for Full Throttle . Luckily, there is usually always a way to find the size anyway. Some blocks are known to be the root blocks of a file, and thus are just set to the size of the resource file. Others are always the last blocks within a parent block, and thus the size can be derived from the parent block size, by subtracting the size of all other sub-blocks (i.e. the offset of the current block, relative to the parent block offset) from the size of the parent.

Entry Based: Some blocks, such as MCMP and COMP, contain their sizes not in bytes, but in entries. So, to get the byte size, we multiply the size of each entry with the number of entries and add the 8 starting bytes mentioned above + the bytes containing the number of entries.

Directory Table: In bundle files, the block types/names and sizes of the contained files are listed in a directory at the start of the bundle file. This size format is used for such blocks.

Old SCUMM: For the early games Indiana Jones and the Last Crusade and Secret of Monkey Island, the entire file format was quite different: Each block started with the four bytes containing the size of the block in big endian followed by two characters for the block type identifier.

VOC: The Creative Voice Files (.voc) do not contain any info on size, which is the reason why MONSTER.SOU files take so long to analyze. In order to find the size, SCUMM Revisited parses the file's data in order to find the end of the file.

Unknown: Unknown is used for blocks that SCUMM Revisited does not know of. Other than displaying "Unknown" in the info panel, I decided to let this format be the same as the Undefined format, which is the safest and will allow more files to be opened that SCUMM Revisited was not made for ;)