This page hosts a formal specification of RenderWare binary stream using Kaitai Struct. This specification can be automatically translated into a variety of programming languages to get a parsing library.
meta:
id: renderware_binary_stream
title: RenderWare binary stream
application: Games based on RenderWare engine (Grand Theft Auto 3D series)
file-extension:
- dff
- txd
xref:
justsolve: RenderWare_binary_stream_file
wikidata: Q29960668
endian: le
bit-endian: le
doc-ref: https://gtamods.com/wiki/RenderWare_binary_stream_file
seq:
- id: code
type: u4
enum: sections
- id: size
type: u4
- id: library_id_stamp
type: u4
- id: body
size: size
type:
switch-on: code
cases:
sections::clump: list_with_header
sections::frame_list: list_with_header
sections::geometry: list_with_header
sections::geometry_list: list_with_header
sections::texture_dictionary: list_with_header
sections::texture_native: list_with_header
sections::atomic: list_with_header
instances:
version:
value: 'library_id_stamp & 0xFFFF0000 != 0 ? (library_id_stamp >> 14 & 0x3FF00) + 0x30000 | (library_id_stamp >> 16 & 0x3F) : library_id_stamp << 8'
types:
list_with_header:
doc: |
Typical structure used by many data types in RenderWare binary
stream. Substream contains a list of binary stream entries,
first entry always has type "struct" and carries some specific
binary data it in, determined by the type of parent. All other
entries, beside the first one, are normal, self-describing
records.
seq:
- id: code
contents: [1, 0, 0, 0]
- id: header_size
type: u4
- id: library_id_stamp
type: u4
- id: header
size: header_size
type:
switch-on: _parent.code
cases:
sections::clump: struct_clump
sections::frame_list: struct_frame_list
sections::geometry: struct_geometry
sections::geometry_list: struct_geometry_list
sections::texture_dictionary: struct_texture_dictionary
sections::atomic: struct_atomic
- id: entries
type: renderware_binary_stream
repeat: eos
instances:
version:
value: 'library_id_stamp & 0xFFFF0000 != 0 ? (library_id_stamp >> 14 & 0x3FF00) + 0x30000 | (library_id_stamp >> 16 & 0x3F) : library_id_stamp << 8'
struct_atomic:
doc-ref: https://gtamods.com/wiki/Atomic_(RW_Section)#Structure
seq:
- id: frame_index
type: u4
- id: geometry_index
type: u4
- id: flag_render
type: b1
- type: b1
- id: flag_collision_test
type: b1
- type: b29
- id: unused
type: u4
struct_texture_dictionary:
seq:
- id: num_textures
type: u4
struct_clump:
doc-ref: https://gtamods.com/wiki/RpClump
seq:
- id: num_atomics
type: u4
- id: num_lights
type: u4
if: _parent.version >= 0x33000
- id: num_cameras
type: u4
if: _parent.version >= 0x33000
struct_frame_list:
doc-ref: 'https://gtamods.com/wiki/Frame_List_(RW_Section)#Structure'
seq:
- id: num_frames
type: u4
- id: frames
type: frame
repeat: expr
repeat-expr: num_frames
frame:
doc-ref: 'https://gtamods.com/wiki/Frame_List_(RW_Section)#Structure'
seq:
- id: rotation_matrix
type: matrix
- id: position
type: vector_3d
- id: cur_frame_idx
type: s4
- id: matrix_creation_flags
type: u4
matrix:
doc-ref: 'https://gtamods.com/wiki/Frame_List_(RW_Section)#Structure'
seq:
- id: entries
type: vector_3d
repeat: expr
repeat-expr: 3
vector_3d:
doc-ref: 'https://gtamods.com/wiki/Frame_List_(RW_Section)#Structure'
seq:
- id: x
type: f4
- id: y
type: f4
- id: z
type: f4
struct_geometry_list:
doc-ref: 'https://gtamods.com/wiki/Geometry_List_(RW_Section)#Structure'
seq:
- id: num_geometries
type: u4
struct_geometry:
doc-ref: https://gtamods.com/wiki/RpGeometry
seq:
- id: format
type: u4
- id: num_triangles
type: u4
- id: num_vertices
type: u4
- id: num_morph_targets
type: u4
- id: surf_prop
type: surface_properties
if: _parent.version < 0x34000
- id: geometry
type: geometry_non_native
if: not is_native
- id: morph_targets
type: morph_target
repeat: expr
repeat-expr: num_morph_targets
instances:
is_textured:
value: format & 0x0000_0004 != 0
is_prelit:
value: format & 0x0000_0008 != 0
is_textured2:
value: format & 0x0000_0080 != 0
is_native:
value: format & 0x0100_0000 != 0
num_uv_layers_raw:
value: (format & 0x00ff_0000) >> 16
num_uv_layers:
value: |
num_uv_layers_raw == 0
? is_textured2
? 2
: is_textured
? 1
: 0
: num_uv_layers_raw
surface_properties:
doc-ref: https://gtamods.com/wiki/RpGeometry
seq:
- id: ambient
type: f4
- id: specular
type: f4
- id: diffuse
type: f4
geometry_non_native:
seq:
- id: prelit_colors
type: rgba
repeat: expr
repeat-expr: _parent.num_vertices
if: _parent.is_prelit
- id: uv_layers
type: uv_layer(_parent.num_vertices)
repeat: expr
repeat-expr: _parent.num_uv_layers
- id: triangles
type: triangle
repeat: expr
repeat-expr: _parent.num_triangles
uv_layer:
params:
- id: num_vertices
type: u4
seq:
- id: tex_coords
type: tex_coord
repeat: expr
repeat-expr: num_vertices
rgba:
seq:
- id: r
type: u1
- id: g
type: u1
- id: b
type: u1
- id: a
type: u1
tex_coord:
seq:
- id: u
type: f4
- id: v
type: f4
triangle:
seq:
- id: vertex2
type: u2
- id: vertex1
type: u2
- id: material_id
type: u2
- id: vertex3
type: u2
morph_target:
seq:
- id: bounding_sphere
type: sphere
- id: has_vertices
type: u4
- id: has_normals
type: u4
- id: vertices
repeat: expr
repeat-expr: _parent.num_vertices
type: vector_3d
if: has_vertices != 0
- id: normals
repeat: expr
repeat-expr: _parent.num_vertices
type: vector_3d
if: has_normals != 0
sphere:
seq:
- id: x
type: f4
- id: y
type: f4
- id: z
type: f4
- id: radius
type: f4
enums:
sections:
0x0001: struct
0x0002: string
0x0003: extension
0x0005: camera
0x0006: texture
0x0007: material
0x0008: material_list
0x0009: atomic_section
0x000a: plane_section
0x000b: world
0x000c: spline
0x000d: matrix
0x000e: frame_list
0x000f: geometry
0x0010: clump
0x0012: light
0x0013: unicode_string
0x0014: atomic
0x0015: texture_native
0x0016: texture_dictionary
0x0017: animation_database
0x0018: image
0x0019: skin_animation
0x001a: geometry_list
0x001b: anim_animation
0x001c: team
0x001d: crowd
0x001e: delta_morph_animation
0x001f: right_to_render
0x0020: multitexture_effect_native
0x0021: multitexture_effect_dictionary
0x0022: team_dictionary
0x0023: platform_independent_texture_dictionary
0x0024: table_of_contents
0x0025: particle_standard_global_data
0x0026: altpipe
0x0027: platform_independent_peds
0x0028: patch_mesh
0x0029: chunk_group_start
0x002a: chunk_group_end
0x002b: uv_animation_dictionary
0x002c: coll_tree
0x0101: metrics_plg
0x0102: spline_plg
0x0103: stereo_plg
0x0104: vrml_plg
0x0105: morph_plg
0x0106: pvs_plg
0x0107: memory_leak_plg
0x0108: animation_plg
0x0109: gloss_plg
0x010a: logo_plg
0x010b: memory_info_plg
0x010c: random_plg
0x010d: png_image_plg
0x010e: bone_plg
0x010f: vrml_anim_plg
0x0110: sky_mipmap_val
0x0111: mrm_plg
0x0112: lod_atomic_plg
0x0113: me_plg
0x0114: lightmap_plg
0x0115: refine_plg
0x0116: skin_plg
0x0117: label_plg
0x0118: particles_plg
0x0119: geomtx_plg
0x011a: synth_core_plg
0x011b: stqpp_plg
0x011c: part_pp_plg
0x011d: collision_plg
0x011e: hanim_plg
0x011f: user_data_plg
0x0120: material_effects_plg
0x0121: particle_system_plg
0x0122: delta_morph_plg
0x0123: patch_plg
0x0124: team_plg
0x0125: crowd_pp_plg
0x0126: mip_split_plg
0x0127: anisotropy_plg
0x0129: gcn_material_plg
0x012a: geometric_pvs_plg
0x012b: xbox_material_plg
0x012c: multi_texture_plg
0x012d: chain_plg
0x012e: toon_plg
0x012f: ptank_plg
0x0130: particle_standard_plg
0x0131: pds_plg
0x0132: prtadv_plg
0x0133: normal_map_plg
0x0134: adc_plg
0x0135: uv_animation_plg
0x0180: character_set_plg
0x0181: nohs_world_plg
0x0182: import_util_plg
0x0183: slerp_plg
0x0184: optim_plg
0x0185: tl_world_plg
0x0186: database_plg
0x0187: raytrace_plg
0x0188: ray_plg
0x0189: library_plg
0x0190: plg_2d # 2D PLG
0x0191: tile_render_plg
0x0192: jpeg_image_plg
0x0193: tga_image_plg
0x0194: gif_image_plg
0x0195: quat_plg
0x0196: spline_pvs_plg
0x0197: mipmap_plg
0x0198: mipmapk_plg
0x0199: font_2d # 2D Font
0x019a: intersection_plg
0x019b: tiff_image_plg
0x019c: pick_plg
0x019d: bmp_image_plg
0x019e: ras_image_plg
0x019f: skin_fx_plg
0x01a0: vcat_plg
0x01a1: path_2d
0x01a2: brush_2d
0x01a3: object_2d
0x01a4: shape_2d
0x01a5: scene_2d
0x01a6: pick_region_2d
0x01a7: object_string_2d
0x01a8: animation_plg_2d
0x01a9: animation_2d
0x01b0: keyframe_2d
0x01b1: maestro_2d
0x01b2: barycentric
0x01b3: platform_independent_texture_dictionary_tk
0x01b4: toc_tk
0x01b5: tpl_tk
0x01b6: altpipe_tk
0x01b7: animation_tk
0x01b8: skin_split_tookit
0x01b9: compressed_key_tk
0x01ba: geometry_conditioning_plg
0x01bb: wing_plg
0x01bc: generic_pipeline_tk
0x01bd: lightmap_conversion_tk
0x01be: filesystem_plg
0x01bf: dictionary_tk
0x01c0: uv_animation_linear
0x01c1: uv_animation_parameter
0x0253_f200: atomic_visibility_distance
0x0253_f201: clump_visibility_distance
0x0253_f202: frame_visibility_distance
0x0253_f2f3: pipeline_set
0x0253_f2f4: unused_5
0x0253_f2f5: texdictionary_link
0x0253_f2f6: specular_material
0x0253_f2f7: unused_8
0x0253_f2f8: effect_2d
0x0253_f2f9: extra_vert_colour
0x0253_f2fa: collision_model
0x0253_f2fb: gta_hanim
0x0253_f2fc: reflection_material
0x0253_f2fd: breakable
0x0253_f2fe: frame
0x0253_f2ff: unused_16
0x050e: bin_mesh_plg
0x0510: native_data_plg
0xf21e: zmodeler_lock