Username:    Password:    Login
Main  Secrets  Links  Specs  Articles  Forum  News  Downloads  Utilities  SCUMM?  Games  Demos  Contact
Main  Secrets  Links  Specs  Articles  Forum  News  Downloads  Utilities  SCUMM?  Games  Demos  Contact

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)

    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.

    + 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.

    Byte 0-1 is the size of the room information (includes objects).

    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.

    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

    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.

    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.



SCUMM Revisited screenshot
SCUMM Revisited

Quick & Easy
SCUMM Hacking Forum