DFF — различия между версиями

Материал из GTAModding.ru
Перейти к: навигация, поиск
Строка 1: Строка 1:
{{перевод}}
+
'''DFF''' — формат файлов, использующийся Rockstar Games для хранения трёхмерных визуальных моделей в Grand Theft Auto III, Grand Theft Auto: Vice City, Grand Theft Auto: San Andreas и некоторых других RenderWare-играх. Является кроссплатформенным форматом.
  
'''DFF''' – формат, использующийся Rockstar Games для хранения трёхмерных игровых моделей в таких играх как [[GTA 3]], [[GTA: Vice City]], [[GTA: San Andreas]]. Является кроссплатформенным форматом.
+
==Основные данные==
 +
Все трёхмерные модели в RenderWare-играх закодированы в виде [[RenderWare binary stream file|бинарных потоков]]. Все бинарные потоки с визуальными моделями имеют расширение [[DFF]] (для хранения отдельных объектов) или [[BSP]] (для хранения одного игрового уровня). Для просмотра и редактирования иерархии потоков [[DFF]] и [[BSP]] существует программа [[RW Analyze]], автором которой является Steve M. Для работы с DFF в Autodesk 3ds Max используются [[KAM's Scripts]] или [[SA Tools]] (автор — DENISka). Импорт и экспорт DFF также присутствует в Zanoza Modeler.
  
== Основные данные ==
+
==Структура==
Все трёхмерные модели в GTA третьей серии закодированы в виде бинарных потоков - [[RenderWare binary stream file]], специализированных для движка RenderWare, используемого в игре. Все бинарные потоки с моделями имеют расширение [[DFF]] (для коллекции разнообразных моделей - генерика, персонажей, оружия, автомобилей и т.д.) или [[BSP]] (для хранения одного игрового уровня). Для просмотра и редактирования иерархии потоков [[DFF]] и [[BSP]] существует программа [[RW Analyze]] от Steve M. Для импорта/экспорта DFF в 3D Studio MAX пользуются [[GTA Tools]] (скрипты КАМа) или [[SA Tools]] (скрипты Дениски). Импорт/экспорт DFF в Zanoza Modeler присутствует в версиях начиная с 1.06.
+
В узлах иерархии бинарных потоков DFF расположены секции, в которых закодированы различные данные трёхмерных объектов: основные и дополнительные. В DFF можно найти секции специфичные для [[RenderWare]] секции и секции, написанные программистами Rockstar Games специально для определённой игры и расширяющие её возможности по сравнению со стандартным форматом RenderWare (Pipeline Set, Specular Material, 2DFX, Night Vertex Colors, Collision Model, Reflection Material, Mesh Extension, Frame).
  
== Структура ==
+
Каждая секция имеет заголовок, по которому можно секцию идентифицировать:
В узлах иерархии бинарных потоков DFF расположены секции, в которых закодированы различные данные трёхмерных объектов - основные и дополнительные. В DFF можно найти секции, специфичные для [[RenderWare]] и не специфичные, написанные программистами RockStar Games специально под определённую игру и расширяющие её возможности по сравнению со стандартным RenderWare (Pipeline Set, Specular Material, 2dfx, Night Vertex Colors, Collision Model, Reflection Material, Mesh Extension, Frame).
+
  
Каждая секция имеет заголовок, по которой можно её идентифицировать:
+
    * (заголовок секции)
 +
        4 bytes - int - идентификатор секции
 +
        4 bytes - int - размер секции
 +
        4 bytes - hex - версия DFF
 +
    * (данные секции)
 +
        [размер секции] bytes - data - данные внутри секции
  
    * (Заголовок секции)
 
        4 bytes - int - Идентификатор секции
 
        4 bytes - int - Размер секции
 
        4 bytes - hex - Версия DFF
 
    * (Данные секции)
 
        [Размер секции] bytes - data - данные внутри секции
 
  
 +
Идентификатор секции определяет, как данные должны быть обработаны. Например, если идентификатор секции = rwDATA, rwSTRING, rwFRAME или rwMATERIALSPLIT, то для анализа секции нужно спуститься на один уровень вниз по иерархии — к данным, где расположены другие секции, как например здесь:
  
Идентификатор секции определяет, как данные должны быть обработаны. Например если идентификатор секции = rwDATA, rwSTRING, rwFRAME или rwMATERIALSPLIT, то для анализа секции нужно спуститься на один уровень вниз по иерархии - в данные, где расположены другие секции, как например здесь:
+
     *(заголовок секции)
 
+
     *(Заголовок секции)
+
 
         4 bytes - int - rwCLUMP
 
         4 bytes - int - rwCLUMP
 
         4 bytes - int - 48
 
         4 bytes - int - 48
 
         2 bytes - int - Unknown
 
         2 bytes - int - Unknown
 
         2 bytes - int - 4099
 
         2 bytes - int - 4099
     *(Данные секции)
+
     *(данные секции)
         (Заголовок секции)
+
         (заголовок секции)
 
             4 bytes - int - rwDATA
 
             4 bytes - int - rwDATA
 
             4 bytes - int - 8
 
             4 bytes - int - 8
 
             2 bytes - int - Unknown
 
             2 bytes - int - Unknown
 
             2 bytes - int - 4099
 
             2 bytes - int - 4099
         (Данные секции)
+
         (данные секции)
 
             4 bytes - int - Some Number
 
             4 bytes - int - Some Number
 
             4 bytes - int - Some Number
 
             4 bytes - int - Some Number
  
         (Заголовок секции)
+
         (заголовок секции)
 
             4 bytes - int - rwSTRING
 
             4 bytes - int - rwSTRING
 
             4 bytes - int - 16
 
             4 bytes - int - 16
 
             2 bytes - int - Unknown
 
             2 bytes - int - Unknown
 
             2 bytes - int - 4099
 
             2 bytes - int - 4099
         (Данные секции)
+
         (данные секции)
 
             16 bytes - string - Data
 
             16 bytes - string - Data
  
Строка 60: Строка 58:
 
     39056126 = rwFRAME
 
     39056126 = rwFRAME
  
Полный список идентификаторов можно найти в отдельной статье: [[list of RW section IDs]]
+
Полный список идентификаторов можно найти в [http://www.gtamodding.com/index.php?title=List_of_RW_section_IDs этой] статье.
  
По имени секции можно догадаться, что в ней хранится (например rwGEOMETRY -> rwDATA содержит все вершины, нормали трёхмерных объектов, в то время как rwGEOMETRYLIST -> rwDATA содержит число и имена геометрических объектов).
+
По имени секции можно догадаться, что в ней хранится (например, rwDATA, что находится в rwGEOMETRY, содержит все вершины и нормали трёхмерных объектов, а rwDATA из секции rwGEOMETRYLIST содержит число и имена геометрических объектов).
  
=== Версии DFF ===
+
===Версии DFF===
В заголовке секции можно найти закодированные номера версий RenderWare, под которую скомпелирован DFF:
+
В заголовке секции можно найти закодированный номер версии RenderWare, под которую скомпилирован DFF-файл:
  
  3.0.0.0 - 0x00000310 - только для мульти-dff и генерика, остатки от ранних версий GTA III.
+
  3.0.0.0 - 0x00000310 - только для MultiDFF и Generic, остатки от ранних версий Grand Theft Auto III
  3.2.0.0 - 0x0800FFFF - GTA III PS2 и PC версий
+
  3.2.0.0 - 0x0800FFFF - Grand Theft Auto III (Sony PlayStation 2 и Microsoft Windows)
  3.3.0.2 - 0x0C02FFFF - GTA VC
+
  3.3.0.2 - 0x0C02FFFF - Grand Theft Auto: Vice City (Microsoft Windows)
  3.4.0.3 - 0x1003FFFF - GTA III и GTA VC X-BOX версий
+
  3.4.0.3 - 0x1003FFFF - Grand Theft Auto III и Grand Theft Auto: Vice City (Microsoft Xbox)
  3.4.0.5 - 0x1005FFFF - GTA VC Android версии
+
  3.4.0.5 - 0x1005FFFF - Grand Theft Auto: Vice City (Android)
  3.5.0.0 - 0x1400FFFF - GTA III и Android версий
+
  3.5.0.0 - 0x1400FFFF - Grand Theft Auto III (Android)
  3.6.0.3 - 0x1803FFFF - GTA SA и Manhunt
+
  3.6.0.3 - 0x1803FFFF - Grand Theft Auto: San Andreas и Manhunt
  
=== Содержимое DFF ===
+
===Содержимое DFF===
  
==== Секция: Clump ====
+
====Секция Clump====
  
Clump - Data
+
Clump Data
  
|SECTION START|
+
|начало секции|
  
     4 bytes - int - Количество объектов
+
     4 bytes - int - количество объектов
  
|SECTION END|
+
|конец секции|
  
  
==== Секция: Frame List ====
+
====Секция Frame List====
  
Frame List - Data
+
Frame List Data
  
|SECTION START|
+
|начало секции|
  
     4 bytes - int - Frame Count
+
     4 bytes - int - количество фреймов
     (Frame Information)
+
     (информация о фрейме)
     {ARRAY OF SIZE: [Frame Count]}
+
     {ARRAY OF SIZE: [количество фреймов]}
         36 bytes - float matrix (3 x 3) - Rotational Matrix
+
         36 bytes - float matrix (3 x 3) - матрица вращения
         12 bytes - float - Coordinates Offset
+
         12 bytes - float - смещение координат
         4 bytes - int - Parent Frame
+
         4 bytes - int - родительский фрейм
         4 bytes - int - Unknown
+
         4 bytes - int - неизвестно
 
     {END ARRAY}
 
     {END ARRAY}
  
|SECTION END|
+
|конец секции|
  
Frame List - Frame
+
Frame List Frame
  
|SECTION START|
+
|начало секции|
  
     [Section Size] bytes - string - Frame Name
+
     [Section Size] bytes - string - имя фрейма
  
|SECTION END|
+
|конец секции|
  
 
{| {{Таблица}}
 
{| {{Таблица}}
 
|+ Стандартные фреймы транспорта
 
|+ Стандартные фреймы транспорта
 
|-
 
|-
! Версия игры !! фреймы !! Назначение
+
! Версия игры !! Фреймы !! Назначение
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || wheel_rf_dummy, wheel_rm_dummy, wheel_rb_dummy, wheel_lf_dummy, wheel_lm_dummy, wheel_lb_dummy || инфо-узлы колёс (модели колёс подгружаются из wheels.dff/GAME.DTZ, исключая GTA SA)
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || wheel_rf_dummy, wheel_rm_dummy, wheel_rb_dummy, wheel_lf_dummy, wheel_lm_dummy, wheel_lb_dummy || Информационные узлы колёс; 3D-модели колёс грузятся из Wheels.DFF (Grand Theft Auto III, Grand Theft Auto: Vice City), из DFF-файла транспортного средства (Grand Theft Auto: San Andreas), из GAME.DTZ (Grand Theft Auto: San Andreas)
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || bump_front_dummy || инфо-узел заднего бампера
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || bump_front_dummy || Информационный узел заднего бампера
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || bonnet_dummy || ось вращения капота
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || bonnet_dummy || Ось вращения капота
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || wing_rf_dummy, wing_rr_dummy, wing_lf_dummy, wing_lr_dummy || инфо-узлы передних и задних "крыльев" авто
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || wing_rf_dummy, wing_rr_dummy, wing_lf_dummy, wing_lr_dummy || Информационные узлы передних и задних «крыльев» автомобиля
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || door_rf_dummy, door_rr_dummy, door_lf_dummy, door_lr_dummy || инфо-узлы передних и задних дверей
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || door_rf_dummy, door_rr_dummy, door_lf_dummy, door_lr_dummy || Информационные узлы передних и задних дверей
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || boot_dummy || ось вращения багажника
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || boot_dummy || Ось вращения багажника
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || bump_rear_dummy || инфо-узел переднего бампера
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || bump_rear_dummy || Информационный узел переднего бампера
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || windscreen_dummy || инфо-узел стекла переднего окна
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || windscreen_dummy || Информационный узел стекла переднего окна
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || ped_frontseat || расположение водителя и пассажира на переднем сидении
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || ped_frontseat || Расположение водителя и пассажира на передних сидениях
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || ped_backseat || расположение пассажиров на заднем сидении
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || ped_backseat || Расположение пассажиров на заднем сидении
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || headlights || переднее освещение (фары)
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || headlights || Переднее освещение (фары)
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || taillights || хвостовые огни-габариты
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || taillights || Задние габаритные огни
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || exhaust || инфо-узел дыма выхлопной трубы
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || exhaust || Информационный узел дыма выхлопной трубы
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || extra1, extra2, extra3, extra4, extra5, extra6 || дополнительные части авто, появляющиеся от случая к случаю
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || extra1, extra2, extra3, extra4, extra5, extra6 || Дополнительные части авто, появляющиеся от случая к случаю
 
|-
 
|-
 
|  ||  ||  
 
|  ||  ||  
Строка 196: Строка 194:
 
| [[Изображение:Lcs.png|16px]] || car4_dummy ||  
 
| [[Изображение:Lcs.png|16px]] || car4_dummy ||  
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Lcs.png|16px]] || chassis_dummy || инфо-узел корпуса машины
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Lcs.png|16px]] || chassis_dummy || Информационный узел кузова
 
|-
 
|-
 
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Lcs.png|16px]] || toprotor ||  
 
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Lcs.png|16px]] || toprotor ||  
Строка 236: Строка 234:
 
|  ||  ||  
 
|  ||  ||  
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || _dam || суффикс, маркирующий повреждённую деталь транспорта
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || _dam || Суффикс, маркирующий повреждённую деталь транспорта
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || _ok || суффикс, маркирующий целую деталь транспорта
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || _ok || Суффикс, маркирующий неповреждённую деталь транспорта
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || _hi || суффикс, маркирующий высокодетализированную часть транспорта
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || _hi || Суффикс, маркирующий высокодетализированную часть транспорта
 
|-
 
|-
 
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || extra ||  
 
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || extra ||  
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || _lo || суффикс, маркирующей низкодетализированную часть транспорта
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || _lo || Суффикс, маркирующей низкодетализированную часть транспорта
 
|-
 
|-
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || _vlo || суффикс, маркирующий ЛОД транспорта
+
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || _vlo || Суффикс, маркирующий низкодетализированную модель транспорта
 
|-
 
|-
 
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || boat_hi ||  
 
| [[Изображение:Gta3.png|16px]] [[Изображение:Vc.png|16px]] [[Изображение:Sa.png|16px]] [[Изображение:Lcs.png|16px]] [[Изображение:Vcs.png|16px]] || boat_hi ||  
Строка 252: Строка 250:
 
|}
 
|}
  
==== Секция: Geometry List ====
+
====Секция Geometry List====
  
Geometry List - Data
+
Geometry List Data
  
|SECTION START|
+
|начало секции|
  
     4 bytes - int - Geometry Count
+
     4 bytes - int - количество геометрических объектов
  
|SECTION END|
+
|конец секции|
  
Geometry List - Material Split
+
Geometry List Material Split
  
|SECTION START|
+
|начало секции|
  
     (Header)
+
     (заголовок)
 
         4 bytes - int - Triangle Strip
 
         4 bytes - int - Triangle Strip
         4 bytes - int - Split Count
+
         4 bytes - int - количество разделений
         4 bytes - int - Face Count
+
         4 bytes - int - количество полигонов
     (Split Information)
+
     (информация о разделении)
     {ARRAY OF SIZE: [Header - Split Count]}
+
     {ARRAY OF SIZE: [заголовок → количество разделений]}
         4 bytes - int - Face Index
+
         4 bytes - int - индекс полигона
         4 bytes - int - Material Index
+
         4 bytes - int - индекс материала
         (Vertex Information)
+
         (информация о вершинах)
         {ARRAY OF SIZE: [Face Index]}
+
         {ARRAY OF SIZE: [индекс полигона]}
             4 bytes - int - Vertex 1
+
             4 bytes - int - веришина 1
 
     {END ARRAY}
 
     {END ARRAY}
  
|SECTION END|
+
|конец секции|
  
==== Секция: Geometry ====
+
====Секция Geometry====
  
     ('''Header''')
+
     (заголовок)
         4 bytes - int - Format
+
         4 bytes - int - формат
         4 bytes - int - Face Count
+
         4 bytes - int - количество полигонов
         4 bytes - int - Vertex Count
+
         4 bytes - int - количество вершин
         4 bytes - int - Frame Count
+
         4 bytes - int - количество фреймов
  
     ('''Lighting Header''')
+
     (заголовок подсекции освещения)
 
     {IF RWver = 3.0.0.0 THEN}
 
     {IF RWver = 3.0.0.0 THEN}
         4 bytes - float - Ambient
+
         4 bytes - float - равномерное
         4 bytes - float - Diffuse
+
         4 bytes - float - рассеянное
         4 bytes - float - Specular
+
         4 bytes - float - зеркальное
 
     {END IF}
 
     {END IF}
  
     ('''Vertex Colors''')
+
     (цвета точек)
 
     {IF Prelit=1 in flags THEN}
 
     {IF Prelit=1 in flags THEN}
         {ARRAY OF SIZE = Vertex Count*4 bytes}
+
         {ARRAY OF SIZE = количество_точек*4 bytes}
             1 byte - byte - Red
+
             1 byte - byte - красный
             1 byte - byte - Green
+
             1 byte - byte - зелёный
             1 byte - byte - Blue
+
             1 byte - byte - голубой
             1 byte - byte - Alpha
+
             1 byte - byte - альфа
 
         {END ARRAY}
 
         {END ARRAY}
 
     {END IF}
 
     {END IF}
  
     ('''UV Mapping level 1''')
+
     (уровень UV-преобразования 1)
 
     {IF Textured=1 or Textured_2=1 in flags THEN}
 
     {IF Textured=1 or Textured_2=1 in flags THEN}
         {ARRAY OF SIZE: Vertex Count*8 bytes}
+
         {ARRAY OF SIZE: количество_точек*8 bytes}
 
             4 bytes - float - U
 
             4 bytes - float - U
 
             4 bytes - float - V
 
             4 bytes - float - V
Строка 314: Строка 312:
 
     {END IF}
 
     {END IF}
  
     ('''UV Mapping level 2''')
+
     (уровень UV-преобразования 2)
 
     {IF Textured_2=1 in flags THEN}
 
     {IF Textured_2=1 in flags THEN}
         {ARRAY OF SIZE: Vertex Count*8 bytes}
+
         {ARRAY OF SIZE: количество_точек*8 bytes}
 
             4 bytes - float - U
 
             4 bytes - float - U
 
             4 bytes - float - V
 
             4 bytes - float - V
Строка 322: Строка 320:
 
     {END IF}
 
     {END IF}
  
     ('''UV Mapping level 3''')
+
     (уровень UV-преобразования 3)
 
     {IF Textured_2=1 in flags THEN}
 
     {IF Textured_2=1 in flags THEN}
         {ARRAY OF SIZE: Vertex Count*8 bytes}
+
         {ARRAY OF SIZE: количество_точек*8 bytes}
 
             4 bytes - float - U
 
             4 bytes - float - U
 
             4 bytes - float - V
 
             4 bytes - float - V
Строка 330: Строка 328:
 
     {END IF}
 
     {END IF}
  
     ('''Faces''')
+
     (полигоны)
     {ARRAY OF SIZE: Face Count*8 bytes}
+
     {ARRAY OF SIZE: количество_точек*8 bytes}
         2 bytes - int - Vertex 2
+
         2 bytes - int - точка 2
         2 bytes - int - Vertex 1
+
         2 bytes - int - точка 1
         2 bytes - int - Vertex Alpha
+
         2 bytes - int - альфа вершины
         2 bytes - int - Vertex 3
+
         2 bytes - int - точка 3
 
     {END ARRAY}
 
     {END ARRAY}
  
     ('''Bounding Sphere''')
+
     (ограничивающая сфера)
         4 bytes - float - Coordinate X
+
         4 bytes - float - координата X
         4 bytes - float - Coordinate Y
+
         4 bytes - float - координата Y
         4 bytes - float - Coordinate Z
+
         4 bytes - float - координата Z
         4 bytes - float - Radius
+
         4 bytes - float - радиус
         4 bytes - int - Has Position
+
         4 bytes - int - имеет позицию
         4 bytes - int - Has Normals
+
         4 bytes - int - имеет нормали
  
 
     ('''Verticles''')
 
     ('''Verticles''')
Строка 353: Строка 351:
 
     {END ARRAY}
 
     {END ARRAY}
  
     ('''Normals''')
+
     (нормали)
 
     {IF Normals=1 in Flags THEN}
 
     {IF Normals=1 in Flags THEN}
         {ARRAY OF SIZE: Vertex Count*12 bytes}
+
         {ARRAY OF SIZE: количество_точек*12 bytes}
             4 bytes - float - Coordinate X
+
             4 bytes - float - координата X
             4 bytes - float - Coordinate Y
+
             4 bytes - float - координата Y
             4 bytes - float - Coordinate Z
+
             4 bytes - float - координата Z
 
         {END ARRAY}
 
         {END ARRAY}
 
     {END IF}
 
     {END IF}
  
===== Подсекция Bin Mesh PLG =====
+
=====Подсекция Bin Mesh PLG=====
  
 
  4 bytes - int - Face type (Apparently always 1, representing a triangle strip)
 
  4 bytes - int - Face type (Apparently always 1, representing a triangle strip)
  4 bytes - int - Number of material splits
+
  4 bytes - int - количество разделений материала
  4 bytes - int - Number of faces
+
  4 bytes - int - количество полигонов
  
The number of material splits defines the size of an array which directly follows the structure above. The structure of the array elements (''TMaterialSplitData'') links the material split index to the vertices of the geometry:
+
Количество разделений материала задаёт размер массива, который управляет структурой нижнего уровня. Структура элементов массива (''TMaterialSplitData'') соединяет индекс разделения материала с точками геометрии:
  
 
  4 bytes - int - Number of vertices
 
  4 bytes - int - Number of vertices
Строка 376: Строка 374:
  
  
===== Подсекция Native Data PLG =====
+
=====Подсекция Native Data PLG=====
  
     ('''Section Header''')
+
     (заголовок секции)
 
         4 bytes - int - 5
 
         4 bytes - int - 5
 
         4 bytes - hex - VertexOffset
 
         4 bytes - hex - VertexOffset
Строка 388: Строка 386:
 
         4 bytes - hex - 0x164314
 
         4 bytes - hex - 0x164314
  
     ('''Material Header''')
+
     (заголовок материала)
 
         4 bytes - int - 0
 
         4 bytes - int - 0
 
         4 bytes - int - unknow1
 
         4 bytes - int - unknow1
Строка 463: Строка 461:
 
                                 // 0x02 rpGEOMETRYNATIVEINSTANCE
 
                                 // 0x02 rpGEOMETRYNATIVEINSTANCE
 
  };
 
  };
'''Flags''' - значение, определяющее содержимое секции геометрии. Раскладывается на логические значения путём деления на 2 и проверки остатка (либо можно просто проверять каждый бит). Значения в итерациях:
+
'''Флаги''' - значения, определяющие содержимое секции геометрии. Раскладываются на логические значения путём деления на 2 и проверки остатка (либо можно просто проверять каждый бит). Значения в итерациях:
  
 
{| {{Таблица}}
 
{| {{Таблица}}
Строка 536: Строка 534:
  
 
|SECTION END|
 
|SECTION END|
 
См. так же [[RenderWare binary stream file]]
 
  
 
{{GTA3-navi}}
 
{{GTA3-navi}}
 
[[Категория:Форматы файлов]][[Категория:GTA 3]][[Категория:GTA VC]][[Категория:GTA SA]]
 
[[Категория:Форматы файлов]][[Категория:GTA 3]][[Категория:GTA VC]][[Категория:GTA SA]]

Версия 11:35, 24 июля 2013

DFF — формат файлов, использующийся Rockstar Games для хранения трёхмерных визуальных моделей в Grand Theft Auto III, Grand Theft Auto: Vice City, Grand Theft Auto: San Andreas и некоторых других RenderWare-играх. Является кроссплатформенным форматом.

Содержание

Основные данные

Все трёхмерные модели в RenderWare-играх закодированы в виде бинарных потоков. Все бинарные потоки с визуальными моделями имеют расширение DFF (для хранения отдельных объектов) или BSP (для хранения одного игрового уровня). Для просмотра и редактирования иерархии потоков DFF и BSP существует программа RW Analyze, автором которой является Steve M. Для работы с DFF в Autodesk 3ds Max используются KAM's Scripts или SA Tools (автор — DENISka). Импорт и экспорт DFF также присутствует в Zanoza Modeler.

Структура

В узлах иерархии бинарных потоков DFF расположены секции, в которых закодированы различные данные трёхмерных объектов: основные и дополнительные. В DFF можно найти секции специфичные для RenderWare секции и секции, написанные программистами Rockstar Games специально для определённой игры и расширяющие её возможности по сравнению со стандартным форматом RenderWare (Pipeline Set, Specular Material, 2DFX, Night Vertex Colors, Collision Model, Reflection Material, Mesh Extension, Frame).

Каждая секция имеет заголовок, по которому можно секцию идентифицировать:

   * (заголовок секции)
       4 bytes - int - идентификатор секции
       4 bytes - int - размер секции
       4 bytes - hex - версия DFF
   * (данные секции)
       [размер секции] bytes - data - данные внутри секции


Идентификатор секции определяет, как данные должны быть обработаны. Например, если идентификатор секции = rwDATA, rwSTRING, rwFRAME или rwMATERIALSPLIT, то для анализа секции нужно спуститься на один уровень вниз по иерархии — к данным, где расположены другие секции, как например здесь:

   *(заголовок секции)
       4 bytes - int - rwCLUMP
       4 bytes - int - 48
       2 bytes - int - Unknown
       2 bytes - int - 4099
   *(данные секции)
       (заголовок секции)
           4 bytes - int - rwDATA
           4 bytes - int - 8
           2 bytes - int - Unknown
           2 bytes - int - 4099
       (данные секции)
           4 bytes - int - Some Number
           4 bytes - int - Some Number
       (заголовок секции)
           4 bytes - int - rwSTRING
           4 bytes - int - 16
           2 bytes - int - Unknown
           2 bytes - int - 4099
       (данные секции)
           16 bytes - string - Data

Список таких идентификаторов, определяющих иерархию компонентов DFF:

   1 = rwDATA
   2 = rwSTRING
   3 = rwEXTENSION
   6 = rwTEXTURE
   7 = rwMATERIAL
   8 = rwMATERIALLIST
   14 = rwFRAMELIST
   15 = rwGEOMETRY
   16 = rwCLUMP
   20 = rwATOMIC
   26 = rwGEOMETRYLIST
   1294 = rwMATERIALSPLIT
   39056126 = rwFRAME

Полный список идентификаторов можно найти в этой статье.

По имени секции можно догадаться, что в ней хранится (например, rwDATA, что находится в rwGEOMETRY, содержит все вершины и нормали трёхмерных объектов, а rwDATA из секции rwGEOMETRYLIST содержит число и имена геометрических объектов).

Версии DFF

В заголовке секции можно найти закодированный номер версии RenderWare, под которую скомпилирован DFF-файл:

3.0.0.0 - 0x00000310 - только для MultiDFF и Generic, остатки от ранних версий Grand Theft Auto III
3.2.0.0 - 0x0800FFFF - Grand Theft Auto III (Sony PlayStation 2 и Microsoft Windows)
3.3.0.2 - 0x0C02FFFF - Grand Theft Auto: Vice City (Microsoft Windows)
3.4.0.3 - 0x1003FFFF - Grand Theft Auto III и Grand Theft Auto: Vice City (Microsoft Xbox)
3.4.0.5 - 0x1005FFFF - Grand Theft Auto: Vice City (Android)
3.5.0.0 - 0x1400FFFF - Grand Theft Auto III (Android)
3.6.0.3 - 0x1803FFFF - Grand Theft Auto: San Andreas и Manhunt

Содержимое DFF

Секция Clump

Clump → Data

|начало секции|

   4 bytes - int - количество объектов

|конец секции|


Секция Frame List

Frame List → Data

|начало секции|

   4 bytes - int - количество фреймов
   (информация о фрейме)
   {ARRAY OF SIZE: [количество фреймов]}
       36 bytes - float matrix (3 x 3) - матрица вращения
       12 bytes - float - смещение координат
       4 bytes - int - родительский фрейм
       4 bytes - int - неизвестно
   {END ARRAY}

|конец секции|

Frame List → Frame

|начало секции|

   [Section Size] bytes - string - имя фрейма

|конец секции|

Стандартные фреймы транспорта
Версия игры Фреймы Назначение
Gta3.png Vc.png Sa.png Lcs.png Vcs.png wheel_rf_dummy, wheel_rm_dummy, wheel_rb_dummy, wheel_lf_dummy, wheel_lm_dummy, wheel_lb_dummy Информационные узлы колёс; 3D-модели колёс грузятся из Wheels.DFF (Grand Theft Auto III, Grand Theft Auto: Vice City), из DFF-файла транспортного средства (Grand Theft Auto: San Andreas), из GAME.DTZ (Grand Theft Auto: San Andreas)
Gta3.png Vc.png Sa.png Lcs.png Vcs.png bump_front_dummy Информационный узел заднего бампера
Gta3.png Vc.png Sa.png Lcs.png Vcs.png bonnet_dummy Ось вращения капота
Gta3.png Vc.png Sa.png Lcs.png Vcs.png wing_rf_dummy, wing_rr_dummy, wing_lf_dummy, wing_lr_dummy Информационные узлы передних и задних «крыльев» автомобиля
Gta3.png Vc.png Sa.png Lcs.png Vcs.png door_rf_dummy, door_rr_dummy, door_lf_dummy, door_lr_dummy Информационные узлы передних и задних дверей
Gta3.png Vc.png Sa.png Lcs.png Vcs.png boot_dummy Ось вращения багажника
Gta3.png Vc.png Sa.png Lcs.png Vcs.png bump_rear_dummy Информационный узел переднего бампера
Gta3.png Vc.png Sa.png Lcs.png Vcs.png windscreen_dummy Информационный узел стекла переднего окна
Gta3.png Vc.png Sa.png Lcs.png Vcs.png ped_frontseat Расположение водителя и пассажира на передних сидениях
Gta3.png Vc.png Sa.png Lcs.png Vcs.png ped_backseat Расположение пассажиров на заднем сидении
Gta3.png Vc.png Sa.png Lcs.png Vcs.png headlights Переднее освещение (фары)
Gta3.png Vc.png Sa.png Lcs.png Vcs.png taillights Задние габаритные огни
Gta3.png Vc.png Sa.png Lcs.png Vcs.png exhaust Информационный узел дыма выхлопной трубы
Gta3.png Vc.png Sa.png Lcs.png Vcs.png extra1, extra2, extra3, extra4, extra5, extra6 Дополнительные части авто, появляющиеся от случая к случаю
Gta3.png Vc.png Lcs.png boat_moving_hi
Gta3.png Vc.png Lcs.png boat_rudder_hi
Vc.png Lcs.png boat_flap_left
Vc.png Lcs.png boat_flap_right
Vc.png Lcs.png boat_rearflap_left
Vc.png Lcs.png boat_rearflap_right
Gta3.png Vc.png Lcs.png windscreen
Gta3.png Vc.png Lcs.png door_lhs_dummy
Gta3.png Vc.png Lcs.png door_rhs_dummy
Gta3.png Vc.png Lcs.png light_front
Gta3.png Vc.png Lcs.png light_rear
Gta3.png Vc.png Lcs.png ped_left_entry
Gta3.png Vc.png Lcs.png ped_mid_entry
Gta3.png Vc.png Lcs.png ped_right_entry
Lcs.png door_front_dummy
Lcs.png door_back_dummy
Lcs.png ramp_front_dummy
Lcs.png ramp_back_dummy
Lcs.png chim_left
Lcs.png ped_point
Lcs.png car1_dummy
Lcs.png car2_dummy
Lcs.png car3_dummy
Lcs.png car4_dummy
Gta3.png Vc.png Lcs.png chassis_dummy Информационный узел кузова
Gta3.png Vc.png Lcs.png toprotor
Gta3.png Vc.png Lcs.png backrotor
Gta3.png Vc.png Lcs.png tail
Gta3.png Vc.png Lcs.png topknot
Gta3.png Vc.png Lcs.png skid_left
Gta3.png Vc.png Lcs.png skid_right
Gta3.png Vc.png Lcs.png wheel_front_dummy
Gta3.png Vc.png Lcs.png wheel_rear_dummy
Gta3.png Vc.png Lcs.png light_tailplane
Gta3.png Vc.png Lcs.png light_left
Gta3.png Vc.png Lcs.png light_right
Gta3.png Vc.png Lcs.png forks_front
Gta3.png Vc.png Lcs.png forks_rear
Gta3.png Vc.png Lcs.png wheel_front
Gta3.png Vc.png Lcs.png wheel_rear
Gta3.png Vc.png Lcs.png mudguard
Vc.png Lcs.png handlebars
Vc.png Lcs.png rearrotor
Gta3.png Vc.png Sa.png Lcs.png Vcs.png _dam Суффикс, маркирующий повреждённую деталь транспорта
Gta3.png Vc.png Sa.png Lcs.png Vcs.png _ok Суффикс, маркирующий неповреждённую деталь транспорта
Gta3.png Vc.png Sa.png Lcs.png Vcs.png _hi Суффикс, маркирующий высокодетализированную часть транспорта
Gta3.png Vc.png Sa.png Lcs.png Vcs.png extra
Gta3.png Vc.png Sa.png Lcs.png Vcs.png _lo Суффикс, маркирующей низкодетализированную часть транспорта
Gta3.png Vc.png Sa.png Lcs.png Vcs.png _vlo Суффикс, маркирующий низкодетализированную модель транспорта
Gta3.png Vc.png Sa.png Lcs.png Vcs.png boat_hi

Секция Geometry List

Geometry List → Data

|начало секции|

   4 bytes - int - количество геометрических объектов

|конец секции|

Geometry List → Material Split

|начало секции|

   (заголовок)
       4 bytes - int - Triangle Strip
       4 bytes - int - количество разделений
       4 bytes - int - количество полигонов
   (информация о разделении)
   {ARRAY OF SIZE: [заголовок → количество разделений]}
       4 bytes - int - индекс полигона
       4 bytes - int - индекс материала
       (информация о вершинах)
       {ARRAY OF SIZE: [индекс полигона]}
           4 bytes - int - веришина 1
   {END ARRAY}

|конец секции|

Секция Geometry

   (заголовок)
       4 bytes - int - формат
       4 bytes - int - количество полигонов
       4 bytes - int - количество вершин
       4 bytes - int - количество фреймов
   (заголовок подсекции освещения)
   {IF RWver = 3.0.0.0 THEN}
       4 bytes - float - равномерное
       4 bytes - float - рассеянное
       4 bytes - float - зеркальное
   {END IF}
   (цвета точек)
   {IF Prelit=1 in flags THEN}
       {ARRAY OF SIZE = количество_точек*4 bytes}
           1 byte - byte - красный
           1 byte - byte - зелёный
           1 byte - byte - голубой
           1 byte - byte - альфа
       {END ARRAY}
   {END IF}
   (уровень UV-преобразования 1)
   {IF Textured=1 or Textured_2=1 in flags THEN}
       {ARRAY OF SIZE: количество_точек*8 bytes}
           4 bytes - float - U
           4 bytes - float - V
       {END ARRAY}
   {END IF}
   (уровень UV-преобразования 2)
   {IF Textured_2=1 in flags THEN}
       {ARRAY OF SIZE: количество_точек*8 bytes}
           4 bytes - float - U
           4 bytes - float - V
       {END ARRAY}
   {END IF}
   (уровень UV-преобразования 3)
   {IF Textured_2=1 in flags THEN}
       {ARRAY OF SIZE: количество_точек*8 bytes}
           4 bytes - float - U
           4 bytes - float - V
       {END ARRAY}
   {END IF}
   (полигоны)
   {ARRAY OF SIZE: количество_точек*8 bytes}
       2 bytes - int - точка 2
       2 bytes - int - точка 1
       2 bytes - int - альфа вершины
       2 bytes - int - точка 3
   {END ARRAY}
   (ограничивающая сфера)
       4 bytes - float - координата X
       4 bytes - float - координата Y
       4 bytes - float - координата Z
       4 bytes - float - радиус
       4 bytes - int - имеет позицию
       4 bytes - int - имеет нормали
   (Verticles)
   {ARRAY OF SIZE: Vertex Count*12 bytes}
       4 bytes - float - Coordinate X
       4 bytes - float - Coordinate Y
       4 bytes - float - Coordinate Z
   {END ARRAY}
   (нормали)
   {IF Normals=1 in Flags THEN}
       {ARRAY OF SIZE: количество_точек*12 bytes}
           4 bytes - float - координата X
           4 bytes - float - координата Y
           4 bytes - float - координата Z
       {END ARRAY}
   {END IF}
Подсекция Bin Mesh PLG
4 bytes - int - Face type (Apparently always 1, representing a triangle strip)
4 bytes - int - количество разделений материала
4 bytes - int - количество полигонов

Количество разделений материала задаёт размер массива, который управляет структурой нижнего уровня. Структура элементов массива (TMaterialSplitData) соединяет индекс разделения материала с точками геометрии:

4 bytes - int - Number of vertices
4 bytes - int - Material index
X bytes -     - Array of DWORDs, each entry representing an vertex index. 
                Array size gets defined by the number of vertices


Подсекция Native Data PLG
   (заголовок секции)
       4 bytes - int - 5
       4 bytes - hex - VertexOffset
       2 bytes - int - VertexUnknow
       2 bytes - int - MaterialCount
       4 bytes - int - 6
       4 bytes - int - VertexCount
       4 bytes - int - 32
       4 bytes - hex - 0x164314
   (заголовок материала)
       4 bytes - int - 0
       4 bytes - int - unknow1
       4 bytes - int - unknow2
   (Material tristrips info)
   {ARRAY OF SIZE: MaterialCount*24 bytes}
       4 bytes - int - MaterialCount.VertexCountStart
       4 bytes - int - MaterialCount.VertexCountEnd
       4 bytes - int - MaterialCount.TristripsCount
       4 bytes - int - MaterialCount.UnknowCount
       4 bytes - hex - Unknow3 (in fist = 0x17AB78)
       4 bytes - hex - 0x19ED91
       {END ARRAY}
   (Padding)
   {ARRAY OF SIZE: 16 - (12+MaterialCount*24 bytes) mod 16}
       1 byte - hex - 0xCD
       {END ARRAY}
   (Tristrips)
   {ARRAY OF SIZE: MaterialCount.TristripsCount*2 bytes}
       2 bytes - int - Vertex
       {END ARRAY}
   (Padding)
   {ARRAY OF SIZE: unknow}
       1 byte - hex - 0xCD
       {END ARRAY}
   (Verticles)
   {ARRAY OF SIZE: Vertex Count*(24 or 32) bytes}
       4 bytes - float - Coordinate X
       4 bytes - float - Coordinate Y
       4 bytes - float - Coordinate Z
       1 byte - int - Color R
       1 byte - int - Color G
       1 byte - int - Color B
       1 byte - int - Color Alpha
       4 bytes - float - U
       4 bytes - float - V
       {IF Textured_2=1 in flags THEN}
           4 bytes - float - U
           4 bytes - float - V
       {END IF}
    {END ARRAY}
   (Padding)
   {ARRAY OF SIZE: unknow}
       1 byte - hex - 0xCD
       {END ARRAY}
   (Normals)
   {IF Normals=1 in Flags THEN}
       {ARRAY OF SIZE: Vertex Count*12 bytes}
           4 bytes - float - Coordinate X
           4 bytes - float - Coordinate Y
           4 bytes - float - Coordinate Z
       {END ARRAY}
   {END IF}
   (Padding)
   {ARRAY OF SIZE: unknow}
       1 byte - hex - 0xCD
       {END ARRAY}

Format - определяет формат геометрии.

struct GeometryFormat{
    unsigned short Flags;       // флаги, см. ниже
    unsigned char  NumTexCoors; // если это значение больше нуля, флаги Textured и Textured_2
                                // игнорируются. Позволяет указывать кол-во текстурных координат.
    unsigned char  GeometryNativeFlags;
                                // 0x01 rpGEOMETRYNATIVE
                                // 0x02 rpGEOMETRYNATIVEINSTANCE
};

Флаги - значения, определяющие содержимое секции геометрии. Раскладываются на логические значения путём деления на 2 и проверки остатка (либо можно просто проверять каждый бит). Значения в итерациях:

DFF flags
Флаг Двоичный вид Имя Описание
1 0000 0001 rpWORLDTRISTRIP на модели используются Triangle strip (обычно в DFF начиная с версии 3.4), экспортируются скриптами Дениски.
2 0000 0010 Meshes в геометрии есть секции Verticles и Faces
4 0000 0100 rpWORLDTEXTURED в геометрии есть секция UV Mapping level 1, для экспорта опция UV в скриптах Кама должна быть включена
8 0000 1000 rpWORLDPRELIT в геометрии есть секция Vertex Colors, для экспорта опция VCol в скриптах Кама должна быть включена
16 0001 0000 rpWORLDNORMALS в геометрии есть секция Normals, для экспорта опция Nor в скриптах Кама должна быть включена
32 0010 0000 rpWORLDLIGHT определяет некий dynamic vertex lightning
64 0100 0000 rpWORLDMODULATEMATERIALCOLOR цвет материала, для экспорта опция MMC в скриптах Кама или Дениски должна быть включена
128 1000 0000 Textured_2 в геометрии есть секции UV Mapping level 1, UV Mapping level 2 и UV Mapping level 3, экспорт поддерживается только официальным экспортёром в DFF от Criterion Games.

Section: Material List

Material List - Data

|SECTION START|

   4 bytes - int - Material Count

|SECTION END|

Section: Material

Material - Data

|SECTION START|

   4 bytes - int - Unknown
   4 bytes - RGBA - Colour
   4 bytes - int - Unknown
   4 bytes - int - Texture Count
   4 bytes - float - Unknown
   4 bytes - float - Unknown
   4 bytes - float - Unknown

|SECTION END|

Section: Texture

Texture - Data

|SECTION START|

   2 bytes - int - Texture Filter Mode Flags
   2 bytes - int - Unknown

|SECTION END|

Section: Atomic

Atomic - Data

|SECTION START|

   4 bytes - int - Frame Number
   4 bytes - int - Geometry Number
   4 bytes - int - Unknown
   4 bytes - int - Unknown

|SECTION END|

п · о · р
GTA III Grand Theft Auto III
Форматы файлов.b.a3d.anm.col.cfg.dff.dat.gxt.ide.ifp.img/.dir.ipl.raw/.sdt.rep.sc.scm.set.txd.zon
Документацияcarcols.datCHASE.DATCULLZONE.DATcuts.imgdefault.datfistfite.datflight.datgta3.exegta3.dat
gta3.imggta3.zonhandling.cfgmain.scmmap.datmap.zonobject.datparticle.cfgped.datpedgrp.dat
pedstats.datsfx.rawsurface.datTimeCyc.DATtracks.dattrain.datwater.datwaterpro.datweapon.dat
ИнструментыCLEOClump ViewerCol-IO‎Collision File Editor IIData toolDFF Viewerdffxbox2pcG-ToolsGTA Garage Mod Manager
GXT EditorGTA3 Limit AdjusterGTA3 Mission BuilderGTA3 PatcherIMG ToolKam's Max ScriptsMap Editor
Mod GeneratorMod InstallerMoo MapperPS2 TXD ModPS2 TXD ViewerResourse HackerRotation Calculator
RW AnalyzeViceTXDWater EditorSanny BuilderTXD ToolTXD WorkshopYAIEZModeler
Туториалыраздел в разработке
Классические МодыGPS RadarBye-Bye BikiniUltimate Stunt ParkThe SphereMiss LibertyIllandoIntercity HighwayShoreside Bridge
Rockstar HeightsLighthouse BridgeBlade FunparkOrbital CityLakeside IslandLiberty PenitentiaryJEM Island
Illando HelixCliff Climbing Mountain
Глобальные МодыReal GTA3Twenty TenSnow CityFrosted WinterUltimateBeta modX-box modBad BusinessGTA3 HDUltra mod
OpenTunnelsBack to the Future
МультиплеерMulti Theft AutoLiberty Unleashed
Исходники4x48ballambulanceasukaasusbcameracar_gencatcopcardebugdemodiablofiretruckfrankgates
genstufhealthhjhoodimportintrojoeykenjiloveluigimayhemmeatpickupsrampagerayrcswitch
taxitoniusjwantedyard