|
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)
* 00.LFL FORMAT:
Byte 0-1 is the magic\id\version byte. At least that's what this program
uses it for: 0A31 for the older\lo-res versions, 0100 for the
newer\hi-res versions. Other versions numbers are greatly appreciated.
Note: In the older versions, all numbers of resources are hard coded
into the .EXE. In SCUMM16, based on the file size of 00.LFL, the
correct numbers will hopefully be used. If your version doesn't work,
please send me the 00.LFL and game .EXE, that way I can make it
supported in this program.
Note: From now own "+" means is only in the newer versions.
SIZE:
+ 2 Bytes - number of objects.
[number of objects] - object flag information (will include more
information later).
+ 1 Byte - number of unknown.
[number of unknown] - unknown at this time.
+ 2 Bytes - number of costumes.
[number of costumes] - room number costume is in.
[number of costumes]*2 - offset of costume in room.
+ 2 Bytes - number of scripts.
[number of scripts] - room number script is in.
[number of scripts]*2 - offset of script in room.
+ 2 Bytes - number of sounds.
[number of sounds] - room number sound is in.
[number of sounds]*2 - offset of sound in room.
* ROOM FILE:
Byte 0-1 is the size of the room information (includes objects).
* HI-RES ROOM FILE:
Byte 4-5 is the width of the background.
Byte 6-7 is the height of the background.
Byte A-B is the offset to the background graphic.
* HI-RES GRAPHIC FORMAT:
The decompression of the hi-res graphic is repeated until width*height
of bytes have been decoded. It is decoded in vertical strips, starting
in the upper left hand corner and moving right like the lo-res picture
screen map. Here's how each compressed byte is treated:
00-0F This is the color and is repeated [next byte] times.
i.e. 03 10 = 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03.
10-7F The lower nibble (4-bits) is the color and is repeated upper
nibble times. i.e. 4F = 0F 0F 0F 0F.
80 Copies [next byte] bytes from the previous vertical strip.
i.e. 80 83 and x=3 and y=3 would copy byte from (2,3) to (3,3),
from (2,4) to (3,4), from (2,5) to (3,5), ... 83 (dec 131) times.
81-FF Same as 80 but repeats [current byte] & 7F times.
i.e. E0 would copy 60 (dec 96) bytes from the previous vertical
strip.
* OBJECT FORMAT:
Byte 0-1 Size of object information.
Byte 4-5 Object number.
Byte 7 Default X location (in characters not pixels).
Byte 8 Default Y location (in characters not pixels).
Byte 9 Width (in characters not pixels).
Byte D (must &F8) Height (in characters not pixels).
Byte E Offset to the object name.
* LO-RES OBJECT GRAPHIC FORMAT:
Drawing a lo-res object is very similar to drawing a lo-res background.
Except objects have their own screen and color map. The graphic starts
out with the four common bytes, and decode the remaining bytes the
same way you decode the picture screen map, except you decode
width*height*2 bytes. The first width*height bytes are the screen map,
the second width*height bytes are the color map. Use the main character
map and draw the graphic the same way you draw the background picture,
except you draw it horizontally (left to right).
SCUMM Commands:
Note: These are just guesses. [] is a 8-bit, {} is a 16-bit, () is 32-bit.
05 {Object #} - Draws object.
07 {Object #} - Enables "open" flag (0x80).
11 [Actor][Command] - Commands actor:
10 Normal face
1C Frown
F5 Face right
F6 Face front
F7 Face back
F8 Face left
FF Stop walking
13 [Actor][Value][Property] - Set property of actor:
02 Body color
04 Costume
05 Text color
14 [Actor] - Actor # speaks, 00 terminated.
1E [Actor][LocX][LocY] - Actor walks to location.
1C [Sound #] - Plays sound.
2E (Delay) - Pauses.
33 [Value1][Value2][Option] - Applies values according to option:
2 Changes color #1 & #2 of screen.
Why lo-res 46.LFL looks wrong.
In SCRIPT #127: 33 09 0B 02.
Want to be able to change manually
in viewer?
42 [Script #] - Calls or loads script.
47 {Object #} - Disables "open" flag (0x80).
54 {Object #} - Renames object.
72 [Room #] - Loads room.
D8 - Current ego speaks, 00 terminated. |