SCUMM/Technical Reference/Room resources
SCUMM Technical Reference → Room resources
SCUMM V1
A room resource is located as the first chunk in a LFL File.
Header
The room resource starts with a 28 bytes header containing the following information:
Location | Format | Data |
---|---|---|
0x00 | UInt16LE | Size of the room resource chunk |
0x02 | ??? | Unknown |
0x04 | UInt16LE | Room width in tiles |
0x06 | UInt16LE | Room height in tiles |
0x08 | ??? | Unknown (Always 0 in NES) |
0x0a | UInt16LE | Offset to gfx nametable location (NES) |
0x0c | UInt16LE | Offset to gfx attrtable location (NES) |
0x0e | UInt16LE | Offset to mask flag value location |
0x10 | ??? | Unknown (On NES both these values are equal) |
0x12 | ??? | Unknown |
0x14 | UInt8 | Number of objects in room |
0x15 | UInt8 | Offset to number of boxes location |
0x16 | UInt8 | Number of sounds in room (Always 0 in NES) |
0x17 | UInt8 | Number of scripts in room |
0x18 | UInt16LE | Offset to exit script location |
0x1a | UInt16LE | Offset to entry script location |
All offsets are relative to the start of the chunk.
Note: Because of the following constraints:
- Offset to box number location is an UInt8, thus must be in the first 255 bytes of the chunk
- The header takes 28 bytes
- The size of object images and object content offsets are 4 bytes per object
The total number of objects per room must be less than 57:
(256 - 28) / 4 = 57
Data
Object images
From byte 0x1c starts the offsets to object images:
Location | Format | Data |
---|---|---|
0x1c | UInt16LE | Offset to object 1 image location |
0x1e | UInt16LE | Offset to object 2 image location |
... | UInt16LE | Repeated as many times as there are objects in room |
Object content
From there, there is the list of offsets to each object content:
Location | Format | Data |
---|---|---|
0x1c + objNum * 2 | UInt16LE | Offset to object 1 content location |
0x1e + objNum * 2 | UInt16LE | Offset to object 2 content location |
... | UInt16LE | Repeated as many times as there are objects in room |
Number of boxes
The boxes number in the room is located at the boxes number offset specified in the header.
Location | Format | Data |
---|---|---|
Offset to number of boxes | UInt8 | Number of boxes in room |
Note: Some LFL files have unknown data between the last object content offset and the boxes number offset location. For most file however, both data are contiguous.
Boxes
2 bytes after the offset to number of boxes starts the payload for the boxes. Each box takes 8 bytes described as follow:
Relative location | Format | Data |
---|---|---|
0x00 | Int8 | uy |
0x01 | Int8 | ly |
0x02 | Int8 | ulx |
0x03 | Int8 | urx |
0x04 | Int8 | llx |
0x05 | Int8 | llx |
0x06 | Int8 | mask |
0x07 | Int8 | flags |