1 per column of 8 pix)ģ.2.9 ZPnn strip off : 16le (offset from this ZPnn. If we have for example 3 palettes, the first APAL block contains its palette followed by 2 other APAL blocks, etc.ģ.2.7 RMIH num z buf: 16le (number of ZPnn in the IM00 block) 3.2.8 SMAP strip off : 32le (offset from this SMAP. Note that the APAL blocks are constructed recursively. Offset : 32le (offset starting from this OFFS block)
The only known flag is the second bit, which means the cycling should go backwards.ģ.2.5 OFFS offset table : block size imply the number of palette ? Start : 8 (start/end entries in the palette)Ĭlose : 8 must be set to 0 to end the blockĭefines the various parts of the palette that can be cycled. Offset : 32le (absolute offset of the ROOM block) *SOU* container for the different versionsĪll the blocks not described here don't contain anything more than the blocks shown in the above structure.*BOXD* box data (box 0 seems to be crap with all the points set to -32000,-32000).*ENCD* entry script (script run when entering the room).*EXCD* exit script (script run when leaving the room).*OBNA* object name (default object name, it may be overrided by the scripts).*VERB* verb entries (the object scripts indexed by verbs.*ZPnn* other z planes (nn >= 1, again see above).*IMnn* image data (image for state nn, start with state 1 as state 0 just display nothing).*ZPnn* stripe table + z planes (nn >= 1).*APAL* 256 entries rgb palette (include the others blocks size).Each object must have an owner and it is usually the room (0xF), but it can be any actor number.įinally we have a list of pre-allocated arrays, these will be allocated by the engine before running the boot script. This block sets the owner, class and initial state of each object. the one given for the room in the DROO block). The offset is relative to the beginning of the ROOM (i.e. right after the LFLF header).Īll the above D? blocks describe where the resources are found. The offset is to the beginning of the ROOM block (i.e. So one can split the game into several files named gamename.xxx. This describes where to find each room: in which file and at which offset. max bit var must be rounded up to the next multiple of 8, as apparently the original engine just divides by 8 to allocate the memory. max global obj is the highest valid object address, so usually the number of objects minus 17 (as object addresses 1-16 are used for actors). It's set to 200 in DOTT, and I suppose this limit was simply set arbitrarily. max local objs is the maximum number of objects used inside a single room. So generally it doesn't represent the actual number of resources, in particular for variables, as most low addresses are reserved and might not be used at all in the scripts. This is used by the VM to ensure resource address validity. Unk2 : 16le (really dunno as it's 0 in dott) Unk : 16le (perhaps actors as it's 16 in dott, but that The list must be terminated with a zero byte. List the name of the rooms, note that you must apply a binary not on the names (name = ~name).
SCUMMVM FILES CODE
Vlc (end code 0x00, so room no starts at 1) Note that the size includes this header! For example, if 'data' contains 32 bytes, then size will be 40, because the block's header is 8 bytes long. DOTT uses 0圆9.Īll SCUMM files are made of blocks like this: According to the ScummVM code, there are 3 keys in use: 0x00, 0xFF and 0圆9. To decrypt just XOR each byte with a key.