RenderWare binary stream file

From GTAModding
Jump to: navigation, search

RenderWare binary stream files are hierarchically structured binary data files used by the RenderWare 3.x graphics engine utilized by Rockstar North for their GTA III trilogy (only on PC, PS2 and XBOX, not PSP!) and related games (Manhunt, Bully).

GTA's model files use the file extension .dff and texture archives use .txd. Other possible extensions, not used by the GTA games, are .rws, .bsp and .dma. GTA3 does use .anm for some of its cutscene animations, but it is the only GTA to do so.

File Format

RW streams are split up into chunks. Each section has a 12 byte header and can either be empty, contain data or more child chunks. The content depends on the type and parent chunks.

uint32 - type
uint32 - size, including child chunks and/or data
uint32 - library ID stamp


The library ID stamp contains the version and build number of the RW library that wrote the file.

The library version is a hexadecimal number and has the form 0xVJNBB where V (3 bits) is the Renderware version, J (4 bits) is the major revision, N (4 bits) is the minor revision and B (6 bits) is the binary revision. Version for instance would be encoded as 0x36003.

The library build is 0xFFFF in all versions used by GTA.

To make the library ID stamp, 0x30000 is subtracted from the version first and then packed as follows (where D is the 16 bit build number):


Version 0x36003 build 0xFFFF for instance is encoded as 0x1803FFFF.

For more information on how the version number can be calculated, see RenderWare.

Valid RW Section IDs

See the list of RW section IDs.

Rockstar's Custom Section IDs

Rockstar added several vendor specific RW plugins, which have their own ID range (0x0253F2F*).

Common File Structures

Basic structure

The basic structure of DFF and TXD files is given below. The Extensions are given as empty, their contents depend on the plugins and plugin data of the object they belong to. These are described elsewhere.




* These chunks can appear multiple times. The count is usually given in the parent's struct.

Tools & Scripts

See also