Game Engines Filetypes Reverse Engineering
A work-in-progress repository containing templating and reading scripts along with file examples of different filetypes used within game engines.
List of engines (or companies if engine name is unknown) which files are to be explored.
List of filetypes which are either already known, at parsing stage or planned to get parsed.
- Known type
- File can be parsed but some fields are unknown
- Parsing in-progress
- Filetype is planned for future
|.bdae||3D model including mesh, materials, textures, nodes, bones, SFX, animations.
|.beff||Visual effects that can be attached to .bdae nodes.|
|.itm||Contains data about different .bdae models placed on a terrain chunk. Implicitly bound with .trn by game world position.|
|.trn||Represents a terrain chunk of 64x64 size. Known info: heightmaps.|
Extension templates are mainly written using 010 Editor (any other templating application is OK as long as it allows making file-parsing scripts). While using it, a good way is to visualize parsed parts of a file even if particular byte sequence meaning is unknown to you. You should also stick to this styling even if you can parse every byte of a certain extension since there can be one file with extra information which is not handled by your template.
Color scheme used by me (and proposed for usage by any contributor) is similar to status legend at Filetypes section:
0x00FF00- known meaning of byte sequence;
0x00FFFF- byte sequence usage is known but meaning is not (for example, 4-byte value can be an offset to unknown region);
0xFFBB00- byte sequence contains a constant zero value across multiple file examples and has unknown meaning;
0x0088FF- byte sequence contains a constant non-zero value across multiple file examples and has unknown meaning;
0x0000FF- unknown meaning of byte sequence.
Keep in mind, that 010 Editor colors are written like BGR, not RGB.
A well-structured storage is easy to search to maintain! That's why a certain logic should be used. In our case, we can have multiple game engines use same extension but those files be of different types.
A top-level directory
engines is used to contain game engines folders. Navigating to certain engine will show a list of folders with extensions supplied as folder names. In case a filetype can be of multiple versions, every version (prefixed with
v) is contained as a separate folder. Inside extension folder (or its version) there must be
engines/ ├── Gameloft/ │ └── bdae/ │ ├── v0.0.0.779/ │ │ ├── samples │ │ │ └── elf_low_h.bdae │ │ ├── scripts │ │ │ └── bdae_import.cs │ │ └── templates │ │ │ └── BDAE.bt │ └── v0.0.0.946/ │ ├── samples │ ├── scripts │ └── templates │ └── BDAE.bt ├── Frostbite/ └── General/