RollerCoaster Tycoon 3

From XentaxWiki
Jump to: navigation, search

Choose archive extension:

OVL


Format Specifications

// .COMMON.OVL Files

// Header

char {4}     - Header (FGRK)
uint32 {4}   - null
uint32 {4}   - Version (1)
uint64 {8}   - null
uint32 {4}   - Number Of Directories (maximum of 4 directories)


// for each directory
uint16 {2}   - Format Header Length
char {X}     - Format Header (FGDK,RCT3)
uint16 {2}   - Directory Name Length
char {X}     - Directory Name
uint32 {4}   - Directory Format? (1=RCT3, 2=FGDK)
uint16 {2}   - Extension Name Length
char {X}     - Extension Name


uint64 {8}   - Number Of Files Of Type 0
uint64 {8}   - Number Of Files Of Type 1
uint64 {8}   - Number Of Files Of Type 2
uint64 {8}   - Number Of Files Of Type 3
uint32 {4}   - null


// The way I think this works is that there are a fixed number of directories
// allowed in an archive (4). The directories each list their number of files
// under the directory loop, as shown by "Number Of Files Of Type #" above.
// So to read the archive, you would read the filename directory file, then all
// files of type 0, then all files of type 1, etc.

// Filename Directory

// for each filename directory
uint32 {4}   - Length of Directory


// for each file in the directory
char {X}     - Filename (replace the : character with a . character)
byte {1}     - null Filename Terminator


// File Data

// for each file
uint32 {4}   - File Length
byte {X}     - File Data


// Offset Directory

uint32 {4}   - Number Of Entries


// for each entry
uint32 {4}   - Offset to something [+185]


// ID Directory

// If the first 4 bytes are not null, then the ID directory exists
// If null, it is the start of the source file directory as indicated below
// There are 4 bytes for every 2 entries in the offset directory above


// for each numEntries/2
uint32 {4}   - Unknown (1/4)


// Source File Directory

// Sometimes this section does not exist
// NOTE: THIS SECTION HAS NOT BEEN RESEARCHED FULLY - IT WILL BE BUGGY!


uint32 {4}   - null (start of source file directory marker?)


// for each group
uint32 {4}   - Unknown
uint32 {4}   - Group Data Length
uint16 {2}   - Description Length
char {X}     - Description


// for each file in this group
uint32 {4}   - A Relative Offset?
uint32 {4}   - Unknown (1)
byte {1}     - Unknown
uint16 {2}   - Filename Length
char {X}     - Filename
byte {1}     - Unknown
byte {1}     - Unknown


uint32 {4}   - Group End Marker (all 255s)




// .UNIQUE.OVL Files
char {4}     - Header (FGRK)
uint32 {4}   - null
uint32 {4}   - Version (1)
uint64 {8}   - null
uint32 {4}   - Number Of Directories

// for each directory

uint16 {2}   - Format Header Length
char {X}     - Format Header (FGDK,RCT3)
uint16 {2}   - Directory Name Length
char {X}     - Directory Name
uint32 {4}   - Unknown (1,2)
uint16 {2}   - Extension Name Length
char {X}     - Extension Name


uint64 {8}   - Number Of Files Of Type 0
uint64 {8}   - Number Of Files Of Type 1
uint64 {8}   - Number Of Files Of Type 2
uint64 {8}   - Number Of Files Of Type 3
uint32 {4}   - null
uint32 {4}   - Directory Length

// for each file

uint32 {4}   - Filename Offset (relative to the start of the filename directory)
uint32 {4}   - Unknown
uint32 {4}   - File Type ID? (1)


uint32 {4}   - Directory Length
// for each file

uint32 {4}   - File Type ID? (0-6)
uint32 {4}   - Unknown
uint32 {4}   - null
uint32 {4}   - Unknown
uint32 {4}   - Unknown (1-2)


uint32 {4}   - Directory Length

// for each file

uint32 {4}   - Unknown
uint32 {4}   - Unknown
uint32 {4}   - Unknown (increments by 20 every X files, where X is variable)


uint32 {4}   - Directory Length

// for each file

byte {22}    - null
uint32 {4}   - Unknown
uint16 {2}   - null
uint32 {4}   - Unknown
uint64 {8}   - Unknown
uint32 {4}   - null
uint32 {4}   - Unknown
uint32 {4}   - Unknown
uint32 {4}   - Unknown (repeat)
uint32 {4}   - Unknown (repeat)
uint32 {4}   - null
uint32 {4}   - Padding (all 255's)
uint32 {4}   - null
uint32 {4}   - Unknown
uint32 {4}   - Unknown (2)
byte {12}    - null
uint32 {4}   - Unknown (1)
uint32 {4}   - null
uint32 {4}   - Offset? (big)
uint32 {4}   - Offset? (big)(repeat)
uint64 {8}   - null


uint32 {4}   - Directory Length

// for each file

byte {28}    - null
uint32 {4}   - Unknown
byte {28}    - null
uint32 {4}   - Unknown
uint32 {4}   - Unknown (2)
byte {28}    - null
uint32 {4}   - Unknown (1)
uint32 {4}   - null
uint32 {4}   - Offset? (big)
uint32 {4}   - Offset? (big)(repeat)


uint32 {4}   - Directory Length [*4]

// for each file

uint32 {4}   - Unknown


// The source file directory comes here, same as in the .common.ovl files

MultiEx BMS Script

Not written yet

Compatible Programs