LTA (File Format)
- LE-CODE & related file formats
- LE-CODE: General description
- LE-CODE: History
- LE-CODE: FAQ for track creators
- LE-CODE: Distribution Tutorial
- LE-CODE: Definition file for distributions
- LE-CODE: FAQ for distribution creators
- LE-CODE: Item Cheat
- LE-CODE: Controllers & Buttons
- LE-CODE: Slot usage
- LE-CODE: Exception Handler
- LPAR: File format for parameters
- LEX: File format and definitions
- LTA: LE-CODE Track Archive
- LFL: LE-CODE File List
- Wiimm's Test Tracks
- Extended presence flags
- Related Categories
LTA (LE-CODE Track Archive) is an archive format developed by Wiimm with ideas of Leseratte. The SZS files of the tracks are stored in the archives. The purpose is to reduce the size of the main directory in order to reduce its storage space.
Introduction
LE-CODE supports up to 4096 tracks including the original tracks and arenas. In addition there are approx. 5% _d tracks, so that we have a total of approx. 4300 tracks. Each normal track requires 20 bytes and each _d track 22 bytes in the main directory of the image. That's a total of more than 86 KB permanently stored in main memory. Extracted common files increases this amount.
The idea now is to replace these 4300 files with about 4 LTA files (max size is 2 GiB), which then only occupy an estimated 100 bytes in the main directory. This saves about 86 KB of main memory. LE-CODE then searches for the tracks in these files. By the way, the main directory of the original DVD has a size of 64 KB.
Within LTA files, the SZS files are addressed via a slot index so that no space is required for file names. Wiimms SZS Tools from version 2.37a can manage LTA files.
Features
- 3 or 4 sections: File Header, Node List, Data and an optional extension list. Each section is aligned to 32 Bytes.
- One node for each slot. Each node supports up to 4 files: SZS and LFL files, standard and _d files. Each node and each file data is aligned to 32 Bytes.
- LFL files are used for ./common/ files. This means that they no longer have to be unpacked manually.
- Up to 5 LTA files (tracks-1.lta to tracks-5.lta) are supported by LE-CODE.
- LE-CODE can manage any number of nodes. So there is no limit here. Anyway, other LTA generators may have a limit.
- Maximum file size must be <2GiB. Because of aligned data, the maximum size of an LTA file is 0x7fffffe0 (2147483616) bytes.
- Files with identical content are recognized and the content is saved only once.
- If no _d file is found, then the standard record is copied to the _d record. So only 1 LTA lookup is needed.
- Since the Wii reads data from the DVD in blocks of 32 bytes, all blocks of data are aligned accordingly.
How LE-CODE searches SZS and Common files
This section describes plans for how LE-CODE will use LTA files. However, this has not yet been implemented.
If the new track index (slot) is known, LE-CODE checks, if file Race/Course/###.szs exists. If it exists, then the classic mode is used. Otherwise LTA mode is used. In classic mode, each supported common file is searched in directory Race/Common/###/.
File Format
All integer values are stored in network byte order (big endian).
File Header
Each file starts with an LTA header.
Offset | Name | Type | Description |
---|---|---|---|
0x00 | magic | char[8] | File magic, always »LTR-ARCH« |
0x08 | version | uint32 | Major version number, 1 at the moment. |
0x0c | head_size | uint32 | Size of this header (also minor version number). 0x24 or 0x2c at the moment. |
0x10 | file_size | uint32 | Total size of this LTA file. Aligned to 32 bytes. Maximum is 0x7fffffe0. |
0x14 | node_offset | uint32 | Offset of node list. Aligned to 32 bytes. Usually placed at the end of the file, but before the extension list. |
0x18 | node_size | uint32 | Size of a single node. 32 at the moment. Multiply node_size * n_slots to get the total size of the node list. |
0x1c | base_slot | uint32 | First used slot. The last used slot is base_slot + n_slots - 1. |
0x20 | n_slots | uint32 | Number of used slots. |
The following data members are only available if head_size ≥ 0x2c | |||
0x24 | ext_offset | uint32 | Offset of extension list. Aligned to 32 bytes. Usually placed at the end of the file. |
0x28 | ext_size | uint32 | Size of extension list. Not aligned. |
0x2c | End of file header |
Node List
Nodes consist of 2 records, one for the standard track and one for the _d track. If a _d track is not found, a copy of the standard track is used instead. The node list is usually stored at the end of the file (behind the data). This allows the LTA generator to process all source files in a single pass.
Offset | Name | Type | Description |
---|---|---|---|
0x00 | szs_offset | uint32 | Offset of data of SZS file. Null if nonexistent. Aligned to 32 bytes. |
0x04 | szs_size | uint32 | Size of data of SZS file. Null if nonexistent. |
0x08 | lfl_offset | uint32 | Offset of data of LFL file. Null if nonexistent. Aligned to 32 bytes. |
0x0c | lfl_size | uint32 | Size of data of LFL file. Null if nonexistent. |
0x10 | End of node-record |
Offset | Name | Type | Description |
---|---|---|---|
0x00 | std | node_record_t | Offsets and sizes of standard files. |
0x10 | d | node_record_t | Offsets and sizes of _d files. Same as std if no _d file exists. |
0x20 | End of node |
Extension List
The optional extension list is a string list with a null terminated strings for each SZS entry (2 SZS entries each node). It declares the file type and the extension of the file. The idea is that tools show the correct file extensions without having to load the entire LTA file for analysis. This would be time-consuming. Possible extensions are szs, u8, bz2, lzma, wu8, wbz and wlz.
Example: szs\0\0wbz\0wbz\0... Here, the first file is a SZS file and _d does not exist. For the second node standard and _d files are of type wbz.
Without the list, the type SZS is assumed for all files.
Data
The data of each file is stored at any place behind the file header. Usually it is stored before the node list in slot order, and here standard before _d file, and SZS before LFL. Each data part is aligned to 32 bytes and padded to the next 32 bytes boundary. Files with identical content are recognized and the content is stored only once.
Manage LTA files
Creating an LTA file
As of version 2.38a of Wiimms SZS Tools, the command wlect distrib supports the instructions lta=DIRECTORY and lta=OPTIONS=DIRECTORY. They create LTA files according to the internal distribution model and stores the files into the given directory. Due to the file limit of 2 GiB, several LTA files may be created.
OPTIONS is a comma separated list of 0 or more options:
- ext
- Append a track file extension list to each LTA.
- remove or rm
- Remove all used SZS source files at the very end of command wlect distrib.
- redir
- Create redirection file lta.szs type USE-LTA.
- yaz0, wbz or bz, bzip2, wlz or lz and lzma
- Force a compression method for all added track files. Re-compress track files with other methods.
- pr0, pr1, pr2, pr5, pr10, pr20, pr30 and pr60
- Controlled by the global processing options +PR0 and +PR1 to +PR60, progress messages can be output. These settings override the global settings, where the number indicates the number of seconds between 2 messages.
DIRECTORY specifies the destination directory. Only files with valid member PATH are added to the archives. SZS files with unknown paths are searched in directories defined by the options --copy-tracks, --move-tracks, --move1-tracks and --link-tracks. Files with identical content are recognized and the content is saved only once.
Executing this instruction may take a little longer as all track files need to be processed. Much more time is required if compression is forced. When creating an LTA file, a log message is displayed:
tracks-1.lta (1245 MB), slots 0..1048 (1028 std, 49 _d, 10 LFL, 57 cache, 67 conv, 165+3 dup), 2m07s
It means: File tracks-1.lta with 1245 MB was created. The slot range goes from 0 to 1048. 1028 standard and 49 _d files were added. 10 LFL files were created for common stuff. 57 files were loaded from cache and 67 files were converted (new compression method). 165 duplicates of the tracks and 3 duplicates of the LFL files were detected. The duplicate data was only saved once (like hard links).
Other commands
Command wszst filetype detects LTA files. Command wszst list (including all list variants) lists the content of LTA files. Command wszst extract extracts all included files.