Difference between revisions of "SA SCM"
m |
|||
(16 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
− | + | (02 00 01)h + 32-bit offset '''GOTO''' next header chunk | |
− | byte | + | byte Target game ('s' - San Andreas for SA, unused at runtime) |
− | + | (Global variable space) Space for global variable storage (first global offset is 8) | |
− | + | (02 00 01)h + 32-bit offset '''GOTO''' next header chunk | |
− | byte | + | byte Chunk index (always 0, unused at runtime) |
− | 32 bit int | + | 32-bit int Number of used objects (at least 1) |
− | + | (Used object array) 24-byte object name * number of used objects (first object name is empty and therefore unused) | |
− | + | (02 00 01)h + 32-bit offset '''GOTO''' next header chunk (third header chunk is compiled only in script multifile) | |
− | byte | + | byte Chunk index (always 1, unused at runtime) |
− | 32 bit int | + | 32-bit int Main script size |
− | 32 bit int | + | 32-bit int Largest mission script size |
− | + | 16-bit int Number of mission scripts (200 in total) | |
− | 32 bit int | + | 16-bit int Number of exclusive mission scripts (3 in total) |
− | + | 32-bit int Largest number of mission script local variables | |
− | + | (Multi script array) 32-bit offset * number of mission scripts | |
− | byte | + | (02 00 01)h + 32-bit offset '''GOTO''' next header chunk |
− | 32 bit int | + | byte Chunk index (always 2, unused at runtime) |
− | 32 bit int | + | 32-bit int Largest streamed script size |
− | 28 | + | 32-bit int Number of streamed scripts |
− | + | (Streamed script array) 28-byte structure * number of streamed scripts (last one is '''AAA''' test script{{ref|1}}) | |
− | + | 20 bytes Filename (without extension) | |
− | + | 32-bit offset File offset (from script multifile end onwards, mostly leftover) | |
− | + | 32-bit int Script size | |
− | byte | + | (02 00 01)h + 32-bit offset '''GOTO''' next header chunk{{ref|2}} |
− | 32 bit int | + | byte Chunk index (always 3, unused at runtime) |
− | + | 32-bit int Unknown (unused at runtime) | |
− | byte | + | (02 00 01)h + 32-bit offset '''GOTO''' main script space{{ref|2}} |
− | 32 bit int | + | byte Chunk index (always 4, unused at runtime) |
− | 32 bit int | + | 32-bit int Size of global variable space (unused at runtime) |
− | ... | + | 32-bit int Build number{{ref|3}} (at least 1, unused at runtime) |
+ | (Main script space) Space of main script (equal to size defined earlier) | ||
+ | (Mission scripts space) Space of mission scripts (each one is stored at file offsets defined earlier) | ||
+ | (Streamed scripts space) Space of streamed scripts (as above but external and discontiguous for script multifile) | ||
+ | |||
+ | {{note|1}} '''AAA''' streamed script is apparently a test script, meaningful for debug builds, which contains no intermediate code and is supposed to store the 8 bytes coming with the sixth header chunk of the script multifile relevant to match the [[Cd image]] where all streamed scripts have been compiled and archived into (notoriously in [[script.img]]). It is advisable to compare data on the basis of the script size rather than of a fixed length (the way it might have been designed to); | ||
+ | |||
+ | {{note|2}} The header chunk is fetched as normal code and may be mandatory only in script multifile; | ||
+ | |||
+ | {{note|3}} The field is not confirmable at this time. The official compiler may keep track of the build number in a text file, say <code>build.txt</code>, which is updated (or created if unexisting) while compiling. | ||
+ | |||
+ | {{N|SA}} | ||
+ | [[Category:Mission Script]] [[Category:File Formats]] |
Latest revision as of 23:25, 12 January 2021
(02 00 01)h + 32-bit offset GOTO next header chunk byte Target game ('s' - San Andreas for SA, unused at runtime) (Global variable space) Space for global variable storage (first global offset is 8) (02 00 01)h + 32-bit offset GOTO next header chunk byte Chunk index (always 0, unused at runtime) 32-bit int Number of used objects (at least 1) (Used object array) 24-byte object name * number of used objects (first object name is empty and therefore unused) (02 00 01)h + 32-bit offset GOTO next header chunk (third header chunk is compiled only in script multifile) byte Chunk index (always 1, unused at runtime) 32-bit int Main script size 32-bit int Largest mission script size 16-bit int Number of mission scripts (200 in total) 16-bit int Number of exclusive mission scripts (3 in total) 32-bit int Largest number of mission script local variables (Multi script array) 32-bit offset * number of mission scripts (02 00 01)h + 32-bit offset GOTO next header chunk byte Chunk index (always 2, unused at runtime) 32-bit int Largest streamed script size 32-bit int Number of streamed scripts (Streamed script array) 28-byte structure * number of streamed scripts (last one is AAA test script[1]) 20 bytes Filename (without extension) 32-bit offset File offset (from script multifile end onwards, mostly leftover) 32-bit int Script size (02 00 01)h + 32-bit offset GOTO next header chunk[2] byte Chunk index (always 3, unused at runtime) 32-bit int Unknown (unused at runtime) (02 00 01)h + 32-bit offset GOTO main script space[2] byte Chunk index (always 4, unused at runtime) 32-bit int Size of global variable space (unused at runtime) 32-bit int Build number[3] (at least 1, unused at runtime) (Main script space) Space of main script (equal to size defined earlier) (Mission scripts space) Space of mission scripts (each one is stored at file offsets defined earlier) (Streamed scripts space) Space of streamed scripts (as above but external and discontiguous for script multifile)
^ AAA streamed script is apparently a test script, meaningful for debug builds, which contains no intermediate code and is supposed to store the 8 bytes coming with the sixth header chunk of the script multifile relevant to match the Cd image where all streamed scripts have been compiled and archived into (notoriously in script.img). It is advisable to compare data on the basis of the script size rather than of a fixed length (the way it might have been designed to);
^ The header chunk is fetched as normal code and may be mandatory only in script multifile;
^ The field is not confirmable at this time. The official compiler may keep track of the build number in a text file, say build.txt
, which is updated (or created if unexisting) while compiling.