FTL file format
.ftl files are used for game resources such as props, items and characters.
They are parsed in
ARX_FTL_Load() in Arx Fatalis 1.21.
.ftl files are created from raw .teo files, but those are not shipped with the game.
The game's loader for the format is in graphics/data/FTL.cpp.
The format header is graphics/data/FTLFormat.h.
The FTL format contains the following data:
- Geometry, rendering and control:
- Vertices (including colour and normal), faces and UVs
- Texture map names
- Named vertex groups for specifying bone influences (multiple bones per vertex are supported, but there doesn't seem to be any weighting information)
- Action points (points of interest on the model, where things can be attached, etc.) that reference vertices to specify coordinates
- Vertex selections for conditional geometry rendering
- Origin coordinates specified by referencing a vertex; the reason for including this is unclear, because it's always zeroes anyway
- Cylinder (purpose unknown)
- Something labelled progressive data (not used in the game)
- Clothes (not used in the game)
- Collision spheres
- Physics box
An FTL file has only one object, without an object hierarchy or kinematics information.
The format appears to have had a conflicted development history. This is evident from dead-end features and data redundancy.
It is also unnecessarily complicated in that it uses PKWARE compression (even though the game assets normally reside in compressed archives anyway) and, in its raw form, includes a checksum. Otherwise, it is easy to parse.
Lack of extensibility is a serious shortcoming: the format does not provide storage for custom data that could be interpreted by future iterations of the engine in arbitrary ways.
Use in Modding
Arx Libertatis includes a Blender add-on that supports import and export of the FTL format (among others). Unlike the original Arx Fatalis, Arx Libertatis can load uncompressed FTL data from a file. The Blender add-on imports both the compressed and uncompressed varieties; it exports only uncompressed FTLs.