This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision | |||
|
mission_impossible:sool_engine [2019/06/19 17:56] shygoo fix 0B, 0C, 0D |
mission_impossible:sool_engine [2019/07/01 18:25] (current) shygoo last minute notes on sool file structure |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== SOOL Engine ====== | ====== SOOL Engine ====== | ||
| - | Scenaric Object Oriented Language | + | SOOL (Scenaric Object Oriented Language) is a proprietary scripting language and engine used by Mission Impossible. |
| - | * [[https://hackmd.io/D7_UZ5kGSWCAZb_nM2-xHg?edit|Rough decompilation of the SOOL Engine]] | + | * [[https://hackmd.io/@shygoo/Byq2TYWkr|SOOL Interpreter partial decomp]] |
| + | |||
| + | ---- | ||
| + | ===== SOOL File structure ===== | ||
| + | |||
| + | ==== File header ==== | ||
| + | ^Offset^Type^Name^Description^ | ||
| + | |0x00|char|signature[4] |"SOOL"| | ||
| + | |0x04|u32 |fileSize |Size of the sool file.| | ||
| + | |0x08|u16 |numSections |Number of interactor sections.| | ||
| + | |0x0A|u8 |padding[2] |Alignment padding.| | ||
| + | |0x0C|u32 |sectionOffsets[]|Array of interactor section offsets. The length of this array is defined by the ''numSections'' field.| | ||
| + | |....|u32 |unknownData[] |Unknown data. Always the same size as ''sectionOffsets''.| | ||
| + | |||
| + | ==== Interactor sections ==== | ||
| + | ^Offset^Type^Name^Description^ | ||
| + | |0x00|u16 |offsVars |Offset of the interactor's variables.| | ||
| + | |0x02|u16 |offsVarsEnd |End offset of the interactor's variables.| | ||
| + | |0x04|u16 |offsElements |Offset of the interactor's elements. 0xFFFF if ''numElements'' is zero.| | ||
| + | |0x06|u16 |numElements |Number of elements.| | ||
| + | |0x08|u16 |unk08 |Unknown - always 0xFFFF?| | ||
| + | |0x0A|u16 |specialMethodIdx|An index of ''methodOffsets''. Unknown purpose.| | ||
| + | |0x0C|u16 |offsMethodsEnd |End offset of the method code.| | ||
| + | |0x0E|u16 |numMethods |Number of methods.| | ||
| + | |0x10|u16 |methodOffsets[] |Array of method offsets. The length of this array is defined by the ''numMethods'' field.| | ||
| + | |....|u16 |variables[] |Variable definitions. The position and length of this array are defined by the ''offsVars'' and ''offsVarsEnd'' fields.| | ||
| + | |....|u8 |methodCode[] |Method bytecode. See commands below.| | ||
| + | |....|u8 |garbage[] |If ''offsMethodsEnd'' is uneven, there will be one padding byte of an arbitrary value here for alignment.| | ||
| + | |....|elem|elements[] |Element lookup table. Each entry contains two u16 fields for the key and value.| | ||
| ---- | ---- | ||