SCUMM Block Specifications Format
Each block specification contains a general description of the block and
a table of the exact ordering of data within the block. The first column
in these tables either contains a string literal (for example the block
name "APAL") or an identifier (made up by me) written in
hungarian notation.
The second column contains the size/format of the data meaning the
following:
- byte - Yep, a byte.
- word - 2 bytes
- dword - 4 bytes
- char - basically a byte, but used for character contents.
- string - null-terminated string, i.e. a string of chars ended with a
byte of the value 0. Normally, char will be used for strings containing
a known number of chars, while string will be used where the length
of the string is variable.
- block - SCUMM format block.
Some of these may be prepended a multiplier, such as "5 *", which
means what you think it does.
The third column contains a description of the data. In this, some
abbreviations are used:
- BE - Big Endian, i.e. the number is stored with the most significant
byte first (as most normal people would write it, no offense to Intel).
Also known as Motorola format.
- LE - Little Endian, i.e. the number is stored with the most significant
byte last. Also known as Intel format.
If nothing is noted, the number is stored as Big Endian.
Special schemes are used for special instances, such as a piece of the spec
being repeated for a specified number of times:
loop <count>
...
end of loop
- or an unspecified number of times:
loop
...
end of loop
Also, if a piece of the spec may not occur in some instances, it's marked
thusly:
(
...
)
Finally, if a piece can be different in some instances, it's marked with:
{
...
}
or
{
...
}