|
SCUMM file format specifications and documentation
The Really Useful SCUMM etc. Info File
Maniac Mansion .lfl-files
Additional .lfl info
AKOS format
Preliminary SAN documentation
Monkey Island 1 & 2 costume format
Monkey Island 2 costume format
Monkey Island 2 SCUMM opcodes
SCUMM index files
.bun file format
.lab file format
EMI .lab file format
EMI .til file format
GF/EMI .laf fonts file format
EMI mesh specs
(download file)
IndexFiles
----------
00.lfl/000.lfl Used in V3/4
.000 Used in V5/6
.LA0 Used in V7/8
Conventions:
------------
All little endian unless stated
Chunk - a named part of the file, ie RNAM
Chunk sizes begin from the start of the chunk ie they include the
8 bytes for the chunk header and size
*=repeat until *=no of items, then move onto the next *
eg for DROO, read Room No until you've read in (No of items)
then do the same for offsets
#=do then move onto the next #item and loop until=no of objects
eg for RNAM, read Room No, them Room Name, then loop
Chunks
------
RNAM Room Names In V5+
MAXS Maximum Values In V5+
DROO Directory of Rooms In V5+
DRSC Direcory of Room Scripts In V8
DSCR Directory of Scripts In V5+
DSOU Directory of Sounds In V5+
DCOS Directory of Costumes In V5+
DCHR Directory of Charsets In V5+
DOBJ Directory of Objects In V5+
AARY List of Arrays In V6+
ANAM Animation Names? In V7
RM Room Names In V3/4
0R Directory Of Rooms In V3/4
0S Directory Of Scripts? In V3/4
0N Directory Of Sounds? In V3/4
0C Directory Of Costumes? In V3/4
0O Directory Of Objects? In V3/4
Scumm V5
--------
Files are xor'ed with 0x69
RNAM
----
Block Name (4 bytes)
Block Size (4 bytes BE)
#Room No (1 byte)
#Room Name (9 bytes) XOR'ed with FF
Blank (00) byte (1 byte) Marks end of chunk
MAXS
----
Block Name (4 bytes)
Block Size (4 bytes BE)
Variables (2 bytes)
Unknown (2 bytes)
Bit Variables (2 bytes)
Local Objects (2 bytes)
Unknown (2 bytes)
Character Sets (2 bytes)
Unknown (2 bytes)
Unknown (2 bytes)
Inventory Objects (2 bytes)
DROO
----
Block Name (4 bytes)
Block Size (4 bytes BE)
No of items (2 bytes)
*Room Number (1 byte)
*Offset (4 bytes)
DSCR
----
Block Name (4 bytes)
Block Size (4 bytes BE)
No of items (2 bytes)
*Room Number (1 byte)
*Offset (4 bytes)
DSOU
----
Block Name (4 bytes)
Block Size (4 bytes BE)
No of items (2 bytes)
*Room Number (1 byte)
*Offset (4 bytes)
DCOS
----
Block Name (4 bytes)
Block Size (4 bytes BE)
No of items (2 bytes)
*Room Number (1 byte)
*Offset (4 bytes)
DCHR
----
Block Name (4 bytes)
Block Size (4 bytes BE)
No of items (2 bytes)
*Room Number (1 byte)
*Offset (4 bytes)
DOBJ
----
Block Name (4 bytes)
Block Size (4 bytes BE)
No of items (2 bytes)
*Owner of Object (1 byte)
ScummV6
-------
Files are xor'ed with 0x69
RNAM
----
Blank Byte(00) (1 byte)
MAXS
----
Block Name (4 bytes)
Block Size (4 bytes BE)
Variables (2 bytes)
Unknown (2 bytes)
Bit Variables (2 bytes)
Local Objects (2 bytes)
Arrays (2 bytes)
Unknown (2 bytes)
Verbs (2 bytes)
Floating Objects (2 bytes)
Inventory Objects (2 bytes)
Rooms (2 bytes)
Scripts (2 bytes)
Sounds (2 bytes)
Character Sets (2 bytes)
Costumes (2 bytes)
Global Objects (2 bytes)
DROO
DSCR
DSOU
DCOS
DCHR
DOBJ
----
All as in V5
AARY
----
Block Name (4 bytes)
Block Size (4 bytes BE)
#Stop (2 bytes) Stops if 0x0000
#A (2 bytes)
#B (2 bytes)
#C (2 bytes)
num=AARY no (itinerate through in loop)
if c=1 then
AARY=(num, 1, a, b)
else
AARY=(num, 1, a, b)
If stop=0 you dont seek past the 6 bytes of A,B,C you just start the loop again.
ScummV7
------
Files aren't xor'ed
RNAM
----
As in V6
MAXS
----
Block Name (4 bytes)
Block Size (4 bytes BE)
Variables (2 bytes)
Bit Variables (2 bytes)
Unknown (2 bytes)
Global Objects (2 bytes)
Local Objects (2 bytes)
New Names (2 bytes)
Verbs (2 bytes)
Floating Objects (2 bytes)
Inventory Objects (2 bytes)
Arrays (2 bytes)
Rooms (2 bytes)
Scripts (2 bytes)
Sounds (2 bytes)
Character Sets (2 bytes)
Costumes (2 bytes)
DROO
DSCR
DSOU
DCOS
DCHR
DOBJ
AARY
----
All as in V5
ANAM
----
Block Name (4 bytes)
Block Size (4 bytes BE)
No of items (2 bytes
#Name (8 bytes)
#Blank (00) byte (1 byte)
Blank (FF) byte (1 byte) Marks end of chunk
ScummV8
-------
Files aren't xor'ed
RNAM
----
As in V6
MAXS
----
Block Name (4 bytes)
Block Size (4 bytes BE)
Variables (4 bytes)
Bit Variables (4 bytes)
Unknown (4 bytes)
Scripts (4 bytes)
Sounds (4 bytes)
Character Sets (4 bytes)
Costumes (4 bytes)
Rooms (4 bytes)
Unknown (4 bytes)
Global Objects (4 bytes)
Unknown (4 bytes)
Local Objects (4 bytes)
New Names (4 bytes)
Floating Objects (4 bytes)
Inventory Objects (4 bytes)
Arrays (4 bytes)
Verbs (4 bytes)
DROO
----
Block Name (4 bytes)
Block Size (4 bytes BE)
No of items (4 bytes)
*Room Number (1 byte)
*Offset (2 bytes)
DRSC
----
Block Name (4 bytes)
Block Size (4 bytes BE)
No of items (4 bytes)
*Room Number (1 byte)
*Offset (2 bytes)
DSCR
----
Block Name (4 bytes)
Block Size (4 bytes BE)
No of items (4 bytes)
*Room Number (1 byte)
*Offset (2 bytes)
DSOU
----
Block Name (4 bytes)
Block Size (4 bytes BE)
No of items (4 bytes)
*Room Number (1 byte)
*Offset (2 bytes)
DCOS
----
Block Name (4 bytes)
Block Size (4 bytes BE)
No of items (4 bytes)
*Room Number (1 byte)
*Offset (2 bytes)
DCHR
----
Block Name (4 bytes)
Block Size (4 bytes BE)
No of items (4 bytes)
*Room Number (1 byte)
*Offset (2 bytes)
DOBJ
AARY
----
All as in V5
Scumm V3/4
----------
File's aren't xor'ed
Block Size does not include the 4 block size bytes
RN
----
Block Size (4 bytes)
Block Name (2 bytes)
#Room No (1 byte)
#Room Name (9 bytes) XOR'ed with FF
Blank (00) byte (1 byte) Marks end of chunk
0R
----
Block Size (4 bytes)
Block Name (2 bytes)
No of items (2 bytes)
*Room Number (1 byte)
*Offset (4 bytes)
0S
----
Block Size (4 bytes)
Block Name (2 bytes)
No of items (2 bytes)
*Room Number (1 byte)
*Offset (4 bytes)
ON
----
Block Size (4 bytes)
Block Name (2 bytes)
No of items (2 bytes)
*Room Number (1 byte)
*Offset (4 bytes)
0C
----
Block Size (4 bytes)
Block Name (2 bytes)
No of items (2 bytes)
*Room Number (1 byte)
*Offset (4 bytes)
0O
----
Block Size (4 bytes)
Block Name (2 bytes)
No of items (2 bytes)
*Owner of Object (1 byte)
|