<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://rnr-wiki.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aleko+2144</id>
	<title>RnR Wiki - Вклад участника [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://rnr-wiki.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aleko+2144"/>
	<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Aleko_2144"/>
	<updated>2026-04-09T08:39:24Z</updated>
	<subtitle>Вклад участника</subtitle>
	<generator>MediaWiki 1.32.0</generator>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5534</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5534"/>
		<updated>2026-02-12T17:35:07Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Блок типа 34 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура vertsStruct:&lt;br /&gt;
 //В блоке-хранилище вершин переменную vertsStructType следует читать как четыре uint8, тогда:&lt;br /&gt;
 int normals_type = vertsStructType[0]&lt;br /&gt;
 int num_UV       = vertsStructType[1]&lt;br /&gt;
 int some_data1   = vertsStructType[2]&lt;br /&gt;
 int some_data1   = vertsStructType[3]&lt;br /&gt;
 //&lt;br /&gt;
 struct vertsStruct{&lt;br /&gt;
     Vector3 position;&lt;br /&gt;
     Vector2 UV;&lt;br /&gt;
     Vector2 additionalUV[num_UV];&lt;br /&gt;
   &lt;br /&gt;
     if (normals_type == 1 || normals_type == 2){&lt;br /&gt;
         Vector3 normal; //обычная нормаль&lt;br /&gt;
     } else if (normals_type == 3){&lt;br /&gt;
         float normal;   //а в таком случае модель не будет затеняться&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Структура faceStruct:&lt;br /&gt;
 struct faceStruct{&lt;br /&gt;
   int   format;&lt;br /&gt;
   float num_1;&lt;br /&gt;
   int   num_32767;&lt;br /&gt;
   int   mtlIndex;&lt;br /&gt;
   int   indexCount;&lt;br /&gt;
   &amp;lt;faceIndex[indexCount] indexes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct faceIndex{&lt;br /&gt;
     int vertexIndex;&lt;br /&gt;
     if (inter_format &amp;amp; 2){&lt;br /&gt;
         Vector2 UV; //индивидуальная UV для данного полигона&lt;br /&gt;
     }&lt;br /&gt;
     if (inter_format &amp;amp; 0x10){&lt;br /&gt;
         if (inter_format &amp;amp; 0x1){&lt;br /&gt;
             Vector3 intensity_vector; //нормаль&lt;br /&gt;
         } else if (inter_format &amp;amp; 0x20){&lt;br /&gt;
             float intensity_float; //если есть, то затенение не будет использоваться&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 35 типов объектов (1 - 33, 41 и 42). К выходу «Дальнобойщиков 2» их количество было увеличено до 41.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  border;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Плоскость border задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09.&lt;br /&gt;
&lt;br /&gt;
Данный контейнер может:&lt;br /&gt;
# Использоваться в качестве ограничителя зоны отрисовки объекта (повсеместно применяется в &amp;quot;Дальнобойщиках 2&amp;quot; в контейнерах коллизии игрового мира). В таком случае отрисовка происходит относительно тангенса, перпендикулярного указанному вектору ''border''&amp;lt;ref&amp;gt;За информацию благодарность LabVaKars&amp;lt;/ref&amp;gt;.&lt;br /&gt;
# Задавать границы события. В таком случае границей события будет сумма всех ''border'' родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_type09_render_tree.jpg|Визуализация зон отрисовки коллизии дорог файла ap.b3d в программе Blender 3.6.23 при помощи плагинов от LabVaKars.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      paramsCount;&lt;br /&gt;
 &amp;lt;float[paramsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 15==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, структура аналогична блоку типа 16. Не встречается в файлах игры.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
У refer-блока количество дочерних блоков может быть меньше, чем у исходного контейнера. При этом, если индекс отображаемой группы в исходном контейнере выше, чем количество групп в refer-блоке, то refer-объект не будет отрисовываться. Данный факт удобно использовать при создании модификаций игры.&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 22==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int paramsCount;&lt;br /&gt;
 &amp;lt;float[paramsCount]&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 26==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
 Vector3  some_vector3;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct spriteData{&lt;br /&gt;
  int   format;&lt;br /&gt;
  float var1;&lt;br /&gt;
  int   num_32767;&lt;br /&gt;
  int   mtlIndex;&lt;br /&gt;
  int   vertsCount;&lt;br /&gt;
  &amp;lt;spriteVertex[vertsCount] verts&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct spriteVertex{&lt;br /&gt;
    Vector2 position;&lt;br /&gt;
    if (inter_format &amp;amp; 2){&lt;br /&gt;
      Vector2 UV;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт. Использует материал с текстурой формата TXR.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Набор спрайтов (31)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  spritePosition?; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.  Использует маску формата MSK, в отличие от типа 28. В Type31Data указаны разные варианты масок, в порядке возрастания разрешения текстуры. Судя по всему, переключение отображаемой маски происходит в зависимости от расстояния до наблюдателя.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Светящиеся точки (34)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      unk_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     //позиция&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     //цвет&lt;br /&gt;
     uint8 B;&lt;br /&gt;
     uint8 G;&lt;br /&gt;
     uint8 R;&lt;br /&gt;
     uint8 A?;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Хранит в себе светящиеся точки, которые всегда рисуются размером в 1 пиксель на экране. Данный функционал полноценно работает только в версиях 4.0 - 5.5. В остальных точки отображаются только чёрным цветом.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
HT2_55_b3d_type34glow.jpg|Подсветка моста на трассе &amp;quot;Бухта-Нижнегорск&amp;quot; в версии 5.5.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер комнаты (41)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      paramsCount;&lt;br /&gt;
 &amp;lt;int[paramsCount] params&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё один вариант контейнера комнаты. Поддерживается игрой, но не используется ни в одном из файлов. Параметров может быть не более двух.&lt;br /&gt;
&lt;br /&gt;
= Приложения =&lt;br /&gt;
==Типы коллизий==&lt;br /&gt;
Параметры типов коллизий блоков 12 и 23.&lt;br /&gt;
&lt;br /&gt;
===Коэффициенты===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! коэффициент потери угловой скорости !! коэффициент потери линейной скорости !! коэффициент трения !! комментарии&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0,05 || 0,10 || 0,60 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1,50 || 0,20 || 0,55 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 3,00 || 0,30 || 0,30 ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0,60 || 0,30 || 0,30 ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0,05 || 0,10 || 0,45 ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 1,00 || 0,20 || 0,45 ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0,60 || 0,20 || 0,30 ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0,60 || 0,30 || 0,45 || уничтожает грузовик&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 1,00 || 0,40 || 0,20 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0,05 || 0,10 || 0,60 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 1,50 || 0,20 || 0,45 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 5,00 || 5,00 || 0,00 ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 5,00 || 5,00 || 0,00 || уничтожает шины&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Эффекты===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! следы от шин !! грязь при пробуксовке колёс !! цвет грязи !! пыль !! звук воды при движении&lt;br /&gt;
|-&lt;br /&gt;
| 1 || + ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 2 || + || + || чёрный ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 3 || + ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 4 ||  ||  ||  ||  || + &lt;br /&gt;
|-&lt;br /&gt;
| 5 || + ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 6 ||  || + || зелёный || + ||  &lt;br /&gt;
|-&lt;br /&gt;
| 7 ||  ||  ||  ||  || + &lt;br /&gt;
|-&lt;br /&gt;
| 8 ||  ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 9 ||  ||  ||  ||  || + &lt;br /&gt;
|-&lt;br /&gt;
| 10 ||  ||  ||  || + ||  &lt;br /&gt;
|-&lt;br /&gt;
| 11 ||  ||  ||  || + ||  &lt;br /&gt;
|-&lt;br /&gt;
| 12 ||  ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 13 ||  ||  ||  ||  ||  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Варианты переключателей типа 21==&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
===Объекты игрового мира===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| Faza8Key || Используется для анимаций&lt;br /&gt;
|-&lt;br /&gt;
| StartKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
===Повреждения автомобилей===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
===Переключатели светотехники===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие автомобильные переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| TestKey || 5 || Используется для отладки и хранит данные для отрисовки коллизий транспорта&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || 3 || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || 2 || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || 2 || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || 4 || Свечение сигнальных ламп радара&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
* На каждую вершину 3D-модели на данном слое UV-развёртки в блоке вершин может приходиться только одна пара UV-координат. Иными словами, недопускается, чтобы одна и та же вершина, используемая в разных треугольниках, имела разные UV-координаты. На каждый островок UV должен приходиться свой набор вершин. Впрочем, данное ограничение можно обойти, указывая индивидуальные координаты вершин каждого треугольника в блоке геометрии. Но в таком случае отражения (см. параметр &amp;quot;env&amp;quot; в [[RES_(формат_файлов)|RES]]) будут рассчитываться не для всей модели, а для каждого треугольника.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:HT2_55_b3d_type34glow.jpg&amp;diff=5533</id>
		<title>Файл:HT2 55 b3d type34glow.jpg</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:HT2_55_b3d_type34glow.jpg&amp;diff=5533"/>
		<updated>2026-02-12T17:24:29Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=%D0%A1%D1%82%D0%B0%D0%BD%D1%86%D0%B8%D0%B8_%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%81%D0%BB%D1%83%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=5532</id>
		<title>Станции технического обслуживания</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=%D0%A1%D1%82%D0%B0%D0%BD%D1%86%D0%B8%D0%B8_%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%81%D0%BB%D1%83%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=5532"/>
		<updated>2026-01-25T12:55:43Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: Добавил информацию про форсированный мотор и присадку&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики 2]]&lt;br /&gt;
[[Файл:GreyStoneRepair.jpg|300px|thumb|right|СТО в Алмазном]]&lt;br /&gt;
'''Станции технического обслуживания (СТО)''' — авторемонтные мастерские в игре [[Дальнобойщики 2]], в которых можно отремонтировать свой транспорт, а также улучшить его.&lt;br /&gt;
&lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Всего в игре 23 СТО, между каждым населённым пунктом есть хотя бы один сервис. В игровом мире мастерские расположены довольно неравномерно, наибольшая концентрация на участке трассы [[Приозёрск]] — [[Бухта]] — 7 штук, в то время как между другими населёнными пунктами их, как правило, не больше двух.&lt;br /&gt;
&lt;br /&gt;
Функции СТО - это, во-первых, восстановление повреждённых или изношенных узлов автомобиля до состояния новых, а во-вторых, установка улучшений. Техническое состояние агрегатов машины и наличие улучшений напрямую влияет на ходовые и эргономические характеристики машины.&lt;br /&gt;
&lt;br /&gt;
== Ремонт автомобиля ==&lt;br /&gt;
&lt;br /&gt;
=== Ремонт повреждений ===&lt;br /&gt;
&lt;br /&gt;
В результате столкновений автомобиль получает повреждения, требующие ремонта. При сильных повреждениях машина начинает заметно хуже ехать, а разбитые фары не могут освещать дорогу. Тариф на ремонт на всех СТО одинаков (в отличие от стоимости топлива на разных АЗС). На СТО происходит оплата только за сам ремонт, в отличие от помощи других водителей или вызова 911, которым помимо стоимости ремонта нужно заплатить дополнительно $500 и $1000 соответственно за сам факт вызова, т.к. вызов можно совершить в любом месте карты, а на СТО нужно доехать своим ходом. В дополненном издании версий 8.х в режиме &amp;quot;Симулятор&amp;quot; для ремонта нужно остановиться под крытой частью СТО, нажать &amp;quot;+&amp;quot; и в появившемся меню выбрать, что именно отремонтировать. Во всех более ранних изданиях (7.х и ниже), а также в режиме &amp;quot;Аркадный&amp;quot; в версиях 8.х, полный ремонт при проезде под крытой частью СТО происходит автоматически на любой скорости без необходимости останавливаться - при наличии необходимой суммы денег на счету. Если средств на полный ремонт не достаточно, то в версиях 8.х можно выбрать в меню только некоторые наиболее важные агрегаты, которые нуждаются в ремонте в первую очередь; в более ранних изданиях такая возможность не предусмотрена.&lt;br /&gt;
&lt;br /&gt;
=== Восстановление изношенных шин и тормозов ===&lt;br /&gt;
&lt;br /&gt;
В процессе эксплуатации автомобиля происходит изнашивание шин и тормозов, что также снижает ходовые качества машины. При износе шин сильно ухудшается манёвренность автомобиля, особенно на высокой скорости, а тормозов - эффективность торможения. Причём, эффективность и износостойкость тормозов можно увеличить за счёт соответствующих улучшений, так чтобы менять их приходилось реже, а вот износостойкость шин улучшить нельзя (в отличие от 1 части &amp;quot;Дальнобойщиков&amp;quot;) и изнашиваются они сами по себе быстрее. Поэтому заменять их нужно довольно часто.&lt;br /&gt;
Посмотреть состояние шин и тормозов можно на F3. Только эти два параметра ухудшаются сами по себе в процессе эксплуатации, а любые другие узлы автомобиля портятся только в результате столкновений (за исключением подержанных автомобилей - в них есть скрытые дефекты, которых вначале не видно, но они проявляются в процессе эксплуатации сами по себе даже без попадания в аварии). Необходимость замены шин и тормозов не сразу очевидна по той причине, что их износ не влияет на стоимость автомобиля и на общий показатель технического состояния на верхней панели. Даже при полностью стёртых протекторах или тормозных колодках никакой сигнализации о необходимости их замены не появится. &lt;br /&gt;
* В версиях игры до 7.х, где нет расширенных возможностей ремонта, замена шин и тормозов происходит автоматически вместе с остальным ремонтом. Причём, если другие повреждения автомобиля отсутствуют, то и изношенные шины и тормоза не заменяются сами (это могут заметить только аккуратные водители, которые могут долго ездить без столкновений и повреждений). Тогда, для их восстановления можно просто поставить и тут же снять какое-либо улучшение для шин и тормозов (в отличие от 1 части игры, где убрать улучшения было нельзя, кроме замены всей машины на новую без улучшений).&lt;br /&gt;
&lt;br /&gt;
=== Восстановление подержанного автомобиля ===&lt;br /&gt;
&lt;br /&gt;
Если вы купили подержанный автомобиль, то сразу после покупки он будет вести себя как новый, но через некоторое время агрегаты, имевшие скрытые дефекты, начнут ломаться, существенно ухудшая ходовые качества машины.&lt;br /&gt;
Автомобиль с пробегом можно восстановить (отремонтировать) до состояния нового. Причём, если это сделать сразу, до выявления скрытых дефектов, то ремонт обойдётся дешевле, чем когда скрытые дефекты уже начали проявляться.&lt;br /&gt;
Восстановить подержанный автомобиль сразу можно через помощь нейтральных водителей по рации. СТО и служба 911 восстанавливают автомобиль, только если скрытые дефекты уже проявились.&lt;br /&gt;
* В версиях 8.х добавлена возможность на СТО сразу восстанавливать автомобиль с пробегом, не дожидаясь поломок - для этого нужно выбрать &amp;quot;Полный ремонт&amp;quot; и оплатить его, даже если изначально стоимость восстановления показана не будет.&lt;br /&gt;
&lt;br /&gt;
=== Установка улучшений ===&lt;br /&gt;
&lt;br /&gt;
На СТО можно поставить различные улучшения, повышающие качество вашего автомобиля. Стоимость каждого улучшения одинакова на всех СТО вне зависимости от типа и марки автомобиля. Любое улучшение можно когда угодно снять с автомобиля (если в текущем СТО производят установку данной детали) и получить обратно деньги, потраченные на него в полном объеме. При продаже усовершенствованного автомобиля в его стоимость также входят всё средства, потраченные на апгрейд.&lt;br /&gt;
В версиях игры до 7.х при заезде на СТО автоматически высвечивается меню улучшений, установку которых данный сервис производит. В версиях игры 8.х для открытия такого меню неободимо нажать &amp;quot;+&amp;quot;, ввиду того, что в этих версиях меню значительно расширено и занимает больше места.&lt;br /&gt;
&lt;br /&gt;
== Список усовершенствований ==&lt;br /&gt;
В ранних зарубежных изданиях игры версий 4.х-5.х изначально было представлено 15 улучшений. &lt;br /&gt;
&lt;br /&gt;
В российских релизных версиях игры версий 6.х-7.х был добавлен Антирадар, а стоимость некоторых улучшений увеличилась от 1.5 до 3 раз, полный пакет стал дороже почти в 1.5 раза. &lt;br /&gt;
&lt;br /&gt;
В Дополненном издании версий 8.х были добавлены Воздухозаборник, Защита фар и Радар глушитель, а Антирадар был переименован в Радар детектор; стоимость большинства улучшений возросла в 2-8 раз в сравнении с версиями 7.х, полный пакет стал дороже в 3.5 раза в сравнении с 7.х и в 5 раз в сравнении с 5.х.&lt;br /&gt;
Подорожания полного пакета связаны не только с ростом цен, но и с добавлением новых позиций.&lt;br /&gt;
&lt;br /&gt;
Ниже приведена таблица с кратким описанием и стоимостью каждого апгрейда.&lt;br /&gt;
&amp;lt;div align=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Модернизация !! Описание!! Стоимость, $ в версиях 8.х !! 7.x !! 5.x&lt;br /&gt;
|-&lt;br /&gt;
| Пневмоподвеска || Лучше сохраняет хрупкий груз || 8700 || 1000 || 1000&lt;br /&gt;
|-&lt;br /&gt;
| Вентилируемый тормоз || Увеличивает эффективность торможения || 4500 || 1500 || 1000 &lt;br /&gt;
|-&lt;br /&gt;
| Тормоз двигателем || Снижает износ тормозов || 4600 || 700 || 700&lt;br /&gt;
|-&lt;br /&gt;
| Усиленная рама || Увеличивает прочность рамы и кузова || 7800 || 2500 || 2500&lt;br /&gt;
|-&lt;br /&gt;
| Бронированные стёкла || Защищает от пуль || 1000 || 500 || 500&lt;br /&gt;
|-&lt;br /&gt;
| Защита фар || Уменьшает вероятность повреждения фар || 900 || -отсутствует- || -отсутствует-&lt;br /&gt;
|-&lt;br /&gt;
| Форсированный двигатель || Увеличивает максимальный крутящий момент на 40% || 12500 || 5000 || 3000&lt;br /&gt;
|-&lt;br /&gt;
| Присадка в двигатель || Снижает расход топлива на 20% || 90  || 20 || 20&lt;br /&gt;
|-&lt;br /&gt;
| Воздухозаборник || Позволяет немного глубже заехать в воду || 500 || -отсутствует- || -отсутствует- &lt;br /&gt;
|-&lt;br /&gt;
| Шины High-way || Повышают скорость и устойчивость на шоссе, снижают проходимость по бездорожью || 2000 || 2000 || 1000&lt;br /&gt;
|-&lt;br /&gt;
| Шины Вездеход || Повышают проходимость по бездорожью, снижают скорость и устойчивость на шоссе || 1500 || 1500 || 500&lt;br /&gt;
|-&lt;br /&gt;
| Дополнительный бак || Вдвое увеличивает запас топлива || 500 || 100 || 100&lt;br /&gt;
|-&lt;br /&gt;
| АБС || Уменьшает заносы при торможении || 3000 || 1000 || 1000&lt;br /&gt;
|-&lt;br /&gt;
| Радар детектор || Предупреждает о стационарном радаре или стоящей на обочине машине милиции || 1200 || 2000 || -отсутствует-&lt;br /&gt;
|-&lt;br /&gt;
| Радар глушитель || Все радары перестают замечать вашу машину || 11500 || -отсутствует- || -отсутствует-&lt;br /&gt;
|-&lt;br /&gt;
| Сканер груза || Указывает на не новую машину или нелегальный груз. Пищит, если нелегальный груз уже загружен || 5400 || 3000 || 3000&lt;br /&gt;
|-&lt;br /&gt;
| Пожарная система || Тушит возгорание двигателя || 4200 || 800 || 800&lt;br /&gt;
|-&lt;br /&gt;
| Навигатор || Показывает направление поворота на развилках, пищит, если сбиться с маршрута || 2500 || 300 || 300&lt;br /&gt;
|-&lt;br /&gt;
| Сигнал || Непрерывный гудок, выразительнее стандартного || 550 || 150 || 150&lt;br /&gt;
|-&lt;br /&gt;
! Итого !! Установить всё !! 72940 !! 20570 !! 15070&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В большинстве СТО можно установить не все апгрейды, а лишь доступные в данном СТО. В следующей таблице указано, где и какие улучшения можно установить в Дополненном издании версий 8.х. В более ранних версиях ассортимент некоторых мастерских несколько отличается, ввиду иного количества апгрейдов. СТО пронумерованы в соответствии с картой&amp;lt;ref&amp;gt;[http://rnr-wiki.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:SuperCargoMap.jpg Карта скрытых грузов] — СТО пронумерованы так же, как на этой карте&amp;lt;/ref&amp;gt;.&lt;br /&gt;
[[Файл:RepairMap.jpg|500px|thumb|left|Карта расположения СТО]]&lt;br /&gt;
&amp;lt;div align=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Модернизация/Наличие в СТО !! 00 !! 01 !! 02 !! 03 !! 04 !! 05 !! 06 !! 07 !! 08 !! 09 !! 10 !! 11 !! 12 !! 13 !! 14 !! 15 !! 16 !! 17-1 !! 17-2 !! 18 !! 19 !! 20 !! А&lt;br /&gt;
|-&lt;br /&gt;
| Пневмоподвеска || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
| Вентилируемый тормоз || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
| Тормоз двигателем || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
| Усиленная рама || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}}&lt;br /&gt;
|-&lt;br /&gt;
| Бронированные стёкла || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
| Защита фар || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
| Форсированный двигатель || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}}&lt;br /&gt;
|-&lt;br /&gt;
| Присадка в двигатель || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
| Воздухозаборник || {{No}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
| Шины High-way || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
| Шины Вездеход || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}}&lt;br /&gt;
|-&lt;br /&gt;
| Дополнительный бак || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
| АБС || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
| Радар детектор || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
| Радар глушитель || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
| Сканер груза || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
| Пожарная система || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
| Навигатор || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}}&lt;br /&gt;
|-&lt;br /&gt;
| Сигнал || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
! Итого, $ !! 34500 !! 72940 !! 35140 !! 52850 !! 53200 !! 41000 !! 43650 !! 54550 !! 16290 !! 54390 !! 58840 !! 72940 !! 38340 !! 20300 !! 39101 !! 53802 !! 39203 !! 55044 !! 70395 !! 50696 !! 38040 !! 62106 !! 24300&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Проще всего найти в ассортименте мастерских навигатор — его устанавливают в 20-ти СТО. Реже всего попадается воздухозаборник — 7 раз. Самый бедный на детали сервис — рядом с [[Алмазный|Алмазным]] — всего лишь 4 наименования. В СТО 01 (в Бухте) и 11 (слева от [[Кольцо|Кольца]]) устанавливают все апгрейды, имеющиеся в игре. Учитывая скорости передвижения по игровому миру, для того чтобы установить все улучшения на автомобиль разом лучше сразу ехать в один из этих сервисов, чем собирать полный комплект по частям.&lt;br /&gt;
&lt;br /&gt;
Помимо довольно важных усовершенствований, увеличивающих скорость, управляемость и прочность транспорта, есть и не очень полезные — Воздухозаборник, Радар детектор, Навигатор и Сигнал.&amp;lt;br /&amp;gt;&lt;br /&gt;
* Первый совсем немного увеличивает глубину, на которую может погрузиться автомобиль, но кардинально это мало что меняет (чуть глубже заехал - и &amp;quot;восстановлению не подлежит&amp;quot;).&lt;br /&gt;
* Радар детектор вовремя замечает только стоящие на обочине патрули (да и за превышение те штрафуют не во всех версиях). Перед стационарным радаром детектор срабатывает слишком поздно, поэтому на высокой скорости (выше 100 км/час) притормозить и избежать штрафа почти невозможно. К тому же, у него не очень приятный звук, который будет особенно доставать в западной части региона, где очень много радаров и патрулей.&lt;br /&gt;
* Навигатор мало полезен по той причине, что дорогу указывает строго по полосе (коллизии), хотя по факту часто бывает можно и нужно например срезать повороты по обочине (чего навигатор не понимает и будет предлагать вернуться строго на полосу). Маршрут указывает только по официальным дорогам — даже известные игроку (и уже отмеченные на карте) срезки игнорируются.&lt;br /&gt;
* Сигнал же вовсе не несёт никакой функции, а лишь изменяет тон гудка автомобиля. Можно использовать для выделения машин своей компании из толпы (управляемые AI автомобили любят погудеть), если логотипа, по мнению игрока, недостаточно.&amp;lt;br /&amp;gt;&lt;br /&gt;
Также довольно сомнительная польза от системы пожаротушения, ведь если ваша машина повреждена настолько, что уже загорелся двигатель, вряд ли вы сможете дальше ехать своим ходом и тем более уйти от дальнейшего обстрела, т.е. для быстрого ремонта нужно вызывать 911 (или помощь водителя). Ведь толку от просто потушенного пожара не много, если машина почти не может дальше ехать. К тому же, если даже денег на вызов помощи не достаточно, то тушение пожара при вызове происходит просто бесплатно (но уже без ремонта машины).&lt;br /&gt;
&lt;br /&gt;
Дополнительный бак и сканер груза не помешают на машинах наемных водителей — игрок, занявший место водителя с нелегальным грузом, будет об этом предупрежден, а при поездке на ЗиЛе в Алмазный топливо не кончится посередине пустыни.&lt;br /&gt;
&lt;br /&gt;
== Интересные факты ==&lt;br /&gt;
* Если остановиться в СТО на виду у конкурента, тот встанет сзади и будет сигналить, пока не освободить ему путь.&lt;br /&gt;
* На скриншотах дорелизных версий игры можно увидеть как минимум 3 различных варианта СТО (не считая финальный).&lt;br /&gt;
* Описание любого апгрейда при желании можно изменить в файле mess.txt, находящемся в корневой папке игры, цены — в файле [[sch-файлы#restable.sch|restable.sch]] в той же папке.&lt;br /&gt;
* Установленный радар детектор будет виден в салоне, сигнал — снаружи на кабине. Остальные апгрейды (даже воздухозаборник и дополнительный бак) внешний вид машины не изменяют.&lt;br /&gt;
* Описание апгрейдов &amp;quot;Вентилируемый тормоз&amp;quot; и &amp;quot;Тормоз двигателем&amp;quot;, вероятно, перепутано, т.к. на самом деле вентилируемый тормоз уменьшает температуру тормозных дисков, что снижает износ колодок, а торможение двигателем создаёт дополнительное тормозное усилие, повышая эффективность торможения. Хотя и &amp;quot;перепутанное&amp;quot; описание отчасти тоже справедливо, т.к. эти параметры взаимосвязаны: чем меньше износ, тем выше эффективность.&lt;br /&gt;
&lt;br /&gt;
== Галерея ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:RepairEng.jpg|СТО и меню апгрейда в версии 5.5&lt;br /&gt;
Файл:СТО Южный.png|Меню апгрейда в версии игры 7.4&lt;br /&gt;
Файл:Repair8.1.jpg|Меню апгрейда и ремонта в версии 8.1&lt;br /&gt;
Файл:RepairBeta1.jpg|СТО из версий 1998-1999 годов&lt;br /&gt;
Файл:RepairBeta2.jpg|Ещё один вариант старого СТО&lt;br /&gt;
Файл:RepairBeta3.jpg|Альтернативный вид СТО из версии 5.5&lt;br /&gt;
Файл:RepairBeta4.jpg|То же, только ночью&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Игровой_регион_(Дб2)}}&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%94%D0%B13&amp;diff=5531</id>
		<title>Шаблон:Дб3</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%94%D0%B13&amp;diff=5531"/>
		<updated>2026-01-07T09:32:27Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: добавил ссылку на утилиты&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=3 style=&amp;quot;background-color:#C6D1D1&amp;quot;|[[Дальнобойщики 3: Покорение Америки]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#C6D1D1; text-align:right; width: 15%&amp;quot;|'''''Игровое наполнение'''''&lt;br /&gt;
|[[Игровой регион (Дальнобойщики 3)|Игровой регион]] • [[Автопарк_(Дальнобойщики_3)|Автопарк]] • [[Побочные задания (Дальнобойщики 3)|Побочные задания]] • [[Саундтрек_(Дальнобойщики_3)|Саундтрек]]&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 10%&amp;quot;|&lt;br /&gt;
[[Файл:D3_jewel_cover.jpg|160px|безрамки|центр]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#C6D1D1; text-align:right&amp;quot;|'''''Аддоны и издания'''''&lt;br /&gt;
|[[Дальнобойщики_3:_Большие_Гонки|Большие Гонки]] • [[Дальнобойщики_3:_Лас-Вегас|Лас-Вегас]] • [[Gold Edition]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#C6D1D1; text-align:right&amp;quot;|'''''Разное'''''&lt;br /&gt;
|[[Дальнобойщики_3:_Покорение_Америки#История_версий|История версий]] • [[Советы_и_секреты_(Дальнобойщики_3)|Советы и секреты]] • [[Модификации_(Дальнобойщики_3)|Модификации]] • [[Утилиты_(Дальнобойщики_3)|Утилиты]] • [[Авторы (Дальнобойщики 3)|Авторы]]&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
==Код для вставки==&lt;br /&gt;
&amp;lt;pre&amp;gt;{{Дб3}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8_(%D0%94%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B1%D0%BE%D0%B9%D1%89%D0%B8%D0%BA%D0%B8_3)&amp;diff=5530</id>
		<title>Модификации (Дальнобойщики 3)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8_(%D0%94%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B1%D0%BE%D0%B9%D1%89%D0%B8%D0%BA%D0%B8_3)&amp;diff=5530"/>
		<updated>2025-12-13T13:00:45Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: Добавил категорию&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_3]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 3)]]&lt;br /&gt;
'''Модификации для игры &amp;quot;Дальнобойщики 3&amp;quot;''' бывают как текстурные, так и программные. Общее количество модификаций небольшое - народ неактивно занимается моддингом игры.&lt;br /&gt;
&lt;br /&gt;
== Создание текстурных модификаций ==&lt;br /&gt;
Для начала, [https://yadi.sk/d/V3MgyWO0UhCWb скачайте] программу wdbTexture. Перед началом работы с программой рекомендуется создать резервную копию модифицируемого wdb-файла.&lt;br /&gt;
&lt;br /&gt;
*Чтобы распаковать wdb-архив, создайте ярлык wdbTexture на рабочем столе, затем переместите на него нужный wdb-файл. Программа создаст папку в том же каталоге, где расположена и распакует туда текстуры.&lt;br /&gt;
*Для того, чтобы запаковать wdb-архив, переместите на ярлык программы нужное изображение в формате bmp.&lt;br /&gt;
'''Важно! Сначала убедитесь, что:'''&lt;br /&gt;
&lt;br /&gt;
* '''Исходный wdb-файл расположен в одной папке с wdbTexture.exe;'''&lt;br /&gt;
&lt;br /&gt;
* '''Имя и размер модифицированного изображения идентичны оригиналу;'''&lt;br /&gt;
&lt;br /&gt;
* '''Модифицированное изображение 32-x битное.'''&lt;br /&gt;
&lt;br /&gt;
== Готовые модификации ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|RnR MOD||[http://rnrmm.ru/publ/mods/rnr_mod/rnr_mod_v2_7/8-1-0-7 Скачать]&lt;br /&gt;
|-&lt;br /&gt;
|Weather MOD||[http://rnrmm.ru/publ/mod_manager_2_mods/rains_mods/weather_mod/10-1-0-9 Скачать]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Внимание! Для установки следующих модификаций требуется ЛИЦЕНЗИОННАЯ НЕ-STEAM версия игры вместе с установленным дополнением &amp;quot;Большие гонки&amp;quot;.'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|BgPlus 2.5||[http://rnrmm.ru/publ/mod_manager_mods/v_1_4_53_143/bgplus_2_5/2-1-0-1 Скачать]&lt;br /&gt;
|-&lt;br /&gt;
|BgPlus 3.0||[http://rnrmm.ru/publ/mod_manager_2_mods/victorsmods/bgplus_3_0/5-1-0-6 Скачать]&lt;br /&gt;
|-&lt;br /&gt;
|BgPlus 4||[http://bgplus.rnrmm.ru/index/russian/0-6 Скачать]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Дб3}}&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9C%D0%BE%D0%B4%D0%B4%D0%B8%D0%BD%D0%B3_(%D0%94%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B1%D0%BE%D0%B9%D1%89%D0%B8%D0%BA%D0%B8_3)&amp;diff=5529</id>
		<title>Категория:Моддинг (Дальнобойщики 3)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9C%D0%BE%D0%B4%D0%B4%D0%B8%D0%BD%D0%B3_(%D0%94%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B1%D0%BE%D0%B9%D1%89%D0%B8%D0%BA%D0%B8_3)&amp;diff=5529"/>
		<updated>2025-12-13T13:00:08Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: Новая страница: «Категория:Дальнобойщики_3»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_3]]&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=%D0%A3%D1%82%D0%B8%D0%BB%D0%B8%D1%82%D1%8B_(%D0%94%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B1%D0%BE%D0%B9%D1%89%D0%B8%D0%BA%D0%B8_3)&amp;diff=5528</id>
		<title>Утилиты (Дальнобойщики 3)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=%D0%A3%D1%82%D0%B8%D0%BB%D0%B8%D1%82%D1%8B_(%D0%94%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B1%D0%BE%D0%B9%D1%89%D0%B8%D0%BA%D0%B8_3)&amp;diff=5528"/>
		<updated>2025-12-13T12:59:14Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: Новая страница: «Категория:Дальнобойщики_3 Категория:Моддинг_(Дальнобойщики_3) '''На данной странице п…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_3]]&lt;br /&gt;
[[Категория:Моддинг_(Дальнобойщики_3)]]&lt;br /&gt;
'''На данной странице представлены утилиты для работы с файлами игры [[Дальнобойщики_3:_Покорение_Америки|Дальнобойщики 3]].'''&lt;br /&gt;
&lt;br /&gt;
== Работа с текстурами (формат WDB) ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Название !! Замечания !! Автор !! Скачать&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15%&amp;quot;| wdbTexture ||style=&amp;quot;width: 45%&amp;quot;| Данная программа работает только со сжатыми текстурами в wdb, импорт/экспорт в bmp. ||style=&amp;quot;width: 15%&amp;quot;| K^2 || '''[https://disk.yandex.ru/d/PU2QmvCFcumzbg Скачать]'''&lt;br /&gt;
|-&lt;br /&gt;
| wdbTexture2 || Данная программа работает только со сжатыми текстурами в wdb, импорт/экспорт в dds/bmp. || K^2 || '''[https://disk.yandex.ru/d/8QZgMyrZ5xLZFQ Скачать]'''&lt;br /&gt;
|-&lt;br /&gt;
| RnR WDB Resources Tool || Поддерживаются практически все типы текстур в wdb, импорт/экспорт в png. Для конвертации текстур используется wrgen.dll из SDK от shao. || aleko2144 || '''[https://disk.yandex.ru/d/hj-zESBX26seAw Скачать]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Работа с 3D-моделями (формат WDB) ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Название !! Замечания !! Автор !! Скачать&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15%&amp;quot;| Плагин для 3dsmax 5 ||style=&amp;quot;width: 45%&amp;quot;| Предназначен для экспорта файлов формата WDB/SML, а также импорта SML. Взят из SDK от shao. ||style=&amp;quot;width: 15%&amp;quot;| SoftLab-NSK || '''[https://disk.yandex.ru/d/M179d5Fq62BJQQ Скачать]'''&lt;br /&gt;
|-&lt;br /&gt;
| Viewer 2005 || Просмотр игрового мира. Программа взята из SDK от shao. || SoftLab-NSK || '''[https://disk.yandex.ru/d/eV-kn0tT6WlAIw Скачать]'''&lt;br /&gt;
|-&lt;br /&gt;
| wdbObj || Конвертация некоторых моделей из wdb в obj.  || K^2 || '''[https://disk.yandex.ru/d/8QZgMyrZ5xLZFQ Скачать]'''&lt;br /&gt;
|-&lt;br /&gt;
| WDB Viewer || Просмотр 3D-моделей внутри WDB-файла, его структуры, экспорт данных в формат GLTF.  || aleko2144 || '''[https://github.com/aleko2144/WDB-Viewer/releases Скачать]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Работа с sch/cnf/pkqt-файлами ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Название !! Предназначение !! Автор !! Скачать&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15%&amp;quot;| Скрипты для Python 3.7 ||style=&amp;quot;width: 45%&amp;quot;| Шифрация/дешифрация XML-файлов Rig'n'Roll Gold Edition.  ||style=&amp;quot;width: 15%&amp;quot;| aleko2144 || '''[https://disk.yandex.ru/d/ckx1t4QjfC-c1w Скачать]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Разное ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Название !! Предназначение !! Автор !! Скачать&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15%&amp;quot;| SDK от shao ||style=&amp;quot;width: 45%&amp;quot;| Редактор квестов, wdbpp, Viewer 2005, экспортер моделей и другие утилиты к игре. Pdf-файл с инструкцией и квесты в формате htm скачаны из ТГ-чата &amp;quot;Дальнобойщики 3: Game &amp;amp; Mods&amp;quot;. ||style=&amp;quot;width: 15%&amp;quot;| SoftLab-NSK || '''[https://disk.yandex.ru/d/bePHKNx7MTGjtw Скачать]'''&lt;br /&gt;
|-&lt;br /&gt;
| wdbppGUI || Визуальный интерфейс для wdbpp из SDK от shao. Выводит структуры файлов формата ANM, PDM, WAY и WDB в текстовом виде (txt/xml).|| aleko2144 || '''[https://disk.yandex.ru/d/meq91iqzN5INzw Скачать]'''&lt;br /&gt;
|}&lt;br /&gt;
{{Дб3}}&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=%D0%A5%D1%80%D0%BE%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8_(%D0%94%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B1%D0%BE%D0%B9%D1%89%D0%B8%D0%BA%D0%B8_3)&amp;diff=5527</id>
		<title>Хронология разработки (Дальнобойщики 3)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=%D0%A5%D1%80%D0%BE%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8_(%D0%94%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B1%D0%BE%D0%B9%D1%89%D0%B8%D0%BA%D0%B8_3)&amp;diff=5527"/>
		<updated>2025-12-08T17:43:47Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: Исправил ссылки на новости второй половины 2007 года&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики 3]]&lt;br /&gt;
В данной статье описана примерная хронология разработки игры &amp;quot;Дальнобойщики 3&amp;quot;. В основе лежат материалы со старой версии сайта www.rignroll.ru, а также en.riotpixels.com и других ресурсов.&lt;br /&gt;
&lt;br /&gt;
== 2001 - 2003 годы ==&lt;br /&gt;
Весной 2001 года была начата разработка игры. Проект был впервые анонсирован на июньском семинаре партнеров &amp;quot;1С&amp;quot; в том же году.&amp;lt;ref&amp;gt;Источник: [http://web.archive.org/web/20080910082354/http://www.rignroll.ru/index.php?type=dev_id&amp;amp;publ_id=179 новости разработки игры за июль 2004 года с официального сайта игры].&amp;lt;/ref&amp;gt; Примерно к 2002 году был разработан формат файлов WDB, использующийся для хранения 3D-сцен игрового мира, транспорта и иных объектов.&amp;lt;ref&amp;gt;Впрочем, это только [[Участник:Aleko_2144|моё личное]] предположение. Некоторые инструменты из SDK от shao к &amp;quot;Дальнобойщикам 3&amp;quot; датированы именно 2002 годом.&amp;lt;/ref&amp;gt; Весной 2003 года &amp;quot;Дальнобойщики 3&amp;quot; были впервые широко представлены публике на Конференции Разработчиков Игр (КРИ 2003) в Москве, а затем – на выставках Е3'03 и ECTS'03, E3’04.&amp;lt;ref&amp;gt;Источник: новости разработки игры за июль 2004 года с официального сайта игры.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Кроме того, скриншоты транспорта и игрового мира с [[Бонусный_диск#Скриншоты|бонусного диска ко второй части]] датированы весной 2003 года.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2003-oct-1.jpg|Предположительно, октябрь 2003 года.&lt;br /&gt;
rignroll-dev-old-01.jpg&lt;br /&gt;
rignroll-dev-old-02.jpg&lt;br /&gt;
rignroll-dev-old-03.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2004 год ==&lt;br /&gt;
=== май&amp;lt;ref&amp;gt;[http://web.archive.org/web/20070825041732/http://www.rignroll.ru/index.php?type=new_id&amp;amp;publ_id=180 Источник]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
&amp;quot;Дальнобойщики 3&amp;quot; были показаны на игровой выставке E3'2004 в Лос-Анджелесе.&lt;br /&gt;
Специально для мероприятия были подготовлены новый видеоролик и демо-версия игры. Игроки получали груз на базе в городе [[Окснард]] и везли товары на базу в [[Лос-Анджелес]] по 101-му и 110-му хайвеям через Голливуд, проезжая прямо над &amp;quot;Конвеншен-центром&amp;quot;, где и проходила выставка E3.&lt;br /&gt;
&lt;br /&gt;
=== июль&amp;lt;ref&amp;gt;Источник: новости разработки игры за июль 2004 года с официального сайта игры.&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
На июль 2004 года, по заявлениям авторов, разработка &amp;quot;Дальнобойщиков 3&amp;quot; шла полным ходом: были готовы или почти готовы большинство технологических решений, шёл к завершению процесс моделирования большинства крупных городов, была создана большая часть машин и персонажей. Продолжались работы над физической моделью, AI и сюжетом игры, а также активно велись переговоры по поводу лицензирования представленных в игре объектов. Выпуск игры был запланирован на 2005 год.&lt;br /&gt;
&lt;br /&gt;
=== сентябрь&amp;lt;ref&amp;gt;[http://web.archive.org/web/20070825041600/http://www.rignroll.ru/index.php?type=new_id&amp;amp;publ_id=206 Источник]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
&amp;quot;Дальнобойщики 3&amp;quot; были представлены на игровой выставке EGN'2004 в Лондоне.&lt;br /&gt;
Специально для мероприятия была подготовлена новая демо-версия игры. Игровой мир был представлен такими городами, как Окснард, Лос-Анджелес, Темикула, Сан-Клементе, Сан-Диего. Общая протяжённость дорог составляла около 70 километров.&lt;br /&gt;
&lt;br /&gt;
=== ноябрь&amp;lt;ref&amp;gt;Источник: [http://web.archive.org/web/20071016085929/http://rignroll.ru/index.php?type=dev_id&amp;amp;publ_id=296 новости разработки игры от 17 ноября 2004 года с официального сайта игры]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
Расширилась территория игрового мира:&lt;br /&gt;
* построена часть города Бейкерсфилд (пересечение SR99 и SR58) вдоль хайвея SR99;&lt;br /&gt;
* практически закончен город Мерсед (SR99);&lt;br /&gt;
* смоделирован город Гринфилд (US101);&lt;br /&gt;
* смоделирован город Мохаве (пересечение SR58 и SR14);&lt;br /&gt;
* смоделирован город Темекула (I15);&lt;br /&gt;
* построены участки дорог US101, I5, I10, I15 связавшие между собой города Окснард, Лос-Анджелес, Сан-Клементе, Сан-Диего и Темекула;&lt;br /&gt;
* существенно подрос Лос-Анджелес вдоль US101, I10, I5;&lt;br /&gt;
* практически завершен город Сан-Франциско. Смоделирована его часть вдоль I80, построены даунтаун, остров Сокровищ (Treasure Island), мост через залив (Bay Bridge), соединяющий Сан-Франциско с Окландом.&lt;br /&gt;
Введена новая физическая модель движения полуприцепов для тягачей, управляемых как игроком, так и NPC.&lt;br /&gt;
Обновлен список полуприцепов. Среди них платформы-контейнеровозы, тяжеловозы, цистерны, рефрижераторы, автовозы.&lt;br /&gt;
Разработаны модели нескольких новых персонажей. Среди них “секретарша”, “бармен”, “полицейский”. Разработаны анимации персонажей для ряда объектов базового мира – бара, мотеля, базы, АЗС.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2004-11-1.jpg&lt;br /&gt;
rignroll-dev-2004-11-2.jpg&lt;br /&gt;
rignroll-dev-2004-11-3.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== декабрь&amp;lt;ref&amp;gt;Источник: [http://web.archive.org/web/20071016085929/http://rignroll.ru/index.php?type=dev_id&amp;amp;publ_id=296 новости разработки игры от 30 декабря 2004 года с официального сайта игры]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
Расширилась территория игрового мира:&lt;br /&gt;
* Практически завершено моделирование города Бейкерсфилд (пересечение SR99 и SR58).&lt;br /&gt;
* Закончено моделирование города Фресно (SR99).&lt;br /&gt;
* Закончено моделирование города Мерсед (SR99).&lt;br /&gt;
* Смоделирован город Мантека (пересечение SR99 и SR120).&lt;br /&gt;
* Смоделирован город Берни (SR395)&lt;br /&gt;
* Смоделирован город Стэндиш (SR395).&lt;br /&gt;
* Ведется моделирование 58-ого хайвея, связавающего между собой города Бейкерсфилд и Мохаве. Интересная деталь: в этом районе &amp;quot;пасут ветер&amp;quot;. Здесь в горах Техачапи нахадится одна из трех самых больших &amp;quot;ветровых ферм&amp;quot; в мире. Она насчитывает более тысячи ветровых генераторов.&lt;br /&gt;
&lt;br /&gt;
Переработана физическая модель столкновений для тягачей и полуприцепов. Появилась новая заправка. Обновлен список автомобилей: добавлены школьный автобус и грузовик бизнес-класса Freightliner FL60. Построены кабины для тягачей Freightliner Argosy и Peterbilt 387.&lt;br /&gt;
&lt;br /&gt;
Разработаны модели нескольких новых персонажей. Среди них &amp;quot;Полицейский детектив&amp;quot; и &amp;quot;Дальнобойщик&amp;quot;.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2004-dec-1.jpg&lt;br /&gt;
rignroll-dev-2004-dec-2.jpg&lt;br /&gt;
rignroll-dev-2004-dec-3.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Интерьер [[Freightliner Argosy]]'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-cab-argosy-2004-1.jpg&lt;br /&gt;
rignroll-cab-argosy-2004-2.jpg&lt;br /&gt;
rignroll-cab-argosy-2004-3.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Интерьер [[Hercules_Atlas|Peterbilt 387]]'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-cab-387-2004-1.jpg&lt;br /&gt;
rignroll-cab-387-2004-2.jpg&lt;br /&gt;
rignroll-cab-387-2004-3.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2005 год ==&lt;br /&gt;
=== февраль&amp;lt;ref&amp;gt;Источник: [http://web.archive.org/web/20071212145519/http://www.rignroll.ru/index.php?type=dev_id&amp;amp;publ_id=324 новости разработки игры от 26 февраля 2005 года с официального сайта игры]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
Расширилась территория игрового мира:&lt;br /&gt;
* Практически завершено моделирование города Сан-Франциско.&lt;br /&gt;
* Продолжено моделирование города Рино вдоль US395 (штат Невада).&lt;br /&gt;
* Смоделирован город Орленд (центр Калифорнии, I5).&lt;br /&gt;
* Начато моделирование города Уивервилл (север Калифорнии, SR299).&lt;br /&gt;
* Начато моделирование города Лебек (юг Калифорнии, I5).&lt;br /&gt;
* Завершено моделирование участка 58-ого хайвея, связывающего между собой города Бейкерсфилд и Мохаве.&lt;br /&gt;
* Начато моделирование дорог I5 и SR99, на участке между городами Бейкерсфилд, Лебек и Кетлмен-Сити.&lt;br /&gt;
&lt;br /&gt;
Ведутся работы по созданию глобальной и изменяемой во времени погодной карты Калифорнии.&lt;br /&gt;
Продолжена разработка модели динамического освещения неба и трехмерных облаков. В небе Калифорнии засияла луна и более 6000 навигационных звезд.&lt;br /&gt;
&lt;br /&gt;
Обновлен список автомобилей. Полиция штата обзавелась собственным постоянным средством передвижения. Прототипом послужил легендарный герой боевиков – Ford Crown Victoria в его полицейской модификации. Один из самых популярных пикапов Chevrolet Silverado проходит последние отстройки динамических характеристик перед его вводом в игру. Построены кабины для тягачей Kenworth K100 и Kenworth T2000.&lt;br /&gt;
&lt;br /&gt;
'''Интерьер [[Kenworth K100E]]'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-cab-k100e-2005-may-1.jpg&lt;br /&gt;
rignroll-cab-k100e-2005-may-2.jpg&lt;br /&gt;
rignroll-cab-k100e-2005-may-3.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Интерьер [[Kenworth T2000]]'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-cab-t2000-1.jpg&lt;br /&gt;
rignroll-cab-t2000-2.jpg&lt;br /&gt;
rignroll-cab-t2000-3.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== март&amp;lt;ref&amp;gt;Источник: [http://web.archive.org/web/20080212002209/http://www.rignroll.ru/index.php?type=dev_id&amp;amp;publ_id=342 новости разработки игры от 31 марта 2005 года с официального сайта игры]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
Расширилась территория игрового мира:&lt;br /&gt;
* Практически завершено моделирование города Рино (штат Невада).&lt;br /&gt;
* Практически завершено моделирование городов Лебек (I5), Сан-Клементе (I5), Уивервилл (север Калифорнии, SR299).&lt;br /&gt;
* Начато моделирование города Окленд (I80, сосед Сан-Франциско)&lt;br /&gt;
* Ведется моделирование города Колфакс (I80, северо-восток Калифорнии)&lt;br /&gt;
* Завершено моделирование дорог I5 и SR99, на участке между городами Бейкерсфилд, Лебек и Кеттлмен-Сити. Этот участок находится на юге долины Сан-Хоакин, лежащей в сердце Калифорнии и ограниченной с запада Береговыми хребтами, а с востока горами Сьерра-Невады. Эту долину часто называют &amp;quot;Салатницей нации&amp;quot; в связи с тем, что здесь выращивается значительная часть всей сельскохозяйственной продукции страны. Здесь же сосредоточена и примерно половина наиболее крупных месторождений нефти и газа континентальной части США.&lt;br /&gt;
* Начато моделирование участка 99-ого хайвея, связывающего между собой города Бейкерсфилд и Фресно.&lt;br /&gt;
&lt;br /&gt;
Обновлен список автомобилей. Построен еще один тягач (прототипом послужил [[Freightliner Century]]) и два легковых автомобиля – Ford Crown Victoria в его &amp;quot;гражданском&amp;quot; исполнении и в модификации такси, а также весьма популярный Volkswagen New Beetle.&lt;br /&gt;
&lt;br /&gt;
'''Freightliner Century:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2005-03-1.jpg&lt;br /&gt;
rignroll-dev-2005-03-2.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Ford Crown Victoria:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2005-03-3.jpg&lt;br /&gt;
rignroll-dev-2005-03-4.jpg&lt;br /&gt;
rignroll-dev-2005-03-5.jpg&lt;br /&gt;
rignroll-dev-2005-03-6.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Volkswagen New Beetle:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2005-03-7.jpg&lt;br /&gt;
rignroll-dev-2005-03-8.jpg&lt;br /&gt;
rignroll-dev-2005-03-9.jpg&lt;br /&gt;
rignroll-dev-2005-03-10.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== июнь&amp;lt;ref&amp;gt;Источник: [http://web.archive.org/web/20080906091012/http://www.rignroll.ru/index.php?type=dev_id&amp;amp;publ_id=358 новости разработки игры от 11 июня 2005 года с официального сайта игры]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
Расширилась территория игрового мира:&lt;br /&gt;
* Практически завершено моделирование города Колфакс (I80).&lt;br /&gt;
* Практически завершено моделирование города Окленд (I80).&lt;br /&gt;
* Начато моделирование города Викторвилл (I15).&lt;br /&gt;
* Начато моделирование города Барстоу (пересечение SR58 и I15), расположенного в пустыне Мохаве неподалеку от знаменитой по американским фильмам военно-воздушной базы &amp;quot;Эдвардс&amp;quot;.&lt;br /&gt;
* Начато моделирование города Санта-Барбара (US101), расположенного на побережье Тихого океана и не менее знаменитого по телевизионным сериалам.&lt;br /&gt;
* Завершено моделирование участка дороги SR99 на участке между городами Бейкерсфилд и Фресно.&lt;br /&gt;
* Ведется моделирование дороги I5 на участке между городами Лос-Анджелес и Лебек;&lt;br /&gt;
* Ведется моделирование дороги US101, проходящей по побережью Тихого океана, на участке между городами Окснард и Санта-Барбара.&lt;br /&gt;
* Ведется моделирование дорог SR14, US395 на участке от Мохаве до Лон-Пайна. Дорога проходит через красно-рыжие скалы известного своей красотой Red Rock Canyon.&lt;br /&gt;
&lt;br /&gt;
Обновлен список автомобилей:&lt;br /&gt;
* Построен легковой автомобиль представительского класса (прототипом послужил Lincoln Town Car).&lt;br /&gt;
* Разработан интерьер кабины для седельного тягача [[Freightliner_FLD_120_Classic_XL|Freightliner FLD120 Classic XL]].&lt;br /&gt;
* Разработан интерьер кабины для седельного тягача [[Freightliner Coronado]].&lt;br /&gt;
* Разработан интерьер кабины для седельного тягача [[Freightliner Century]].&lt;br /&gt;
&lt;br /&gt;
'''Lincoln Town Car:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2005-06-01.jpg&lt;br /&gt;
rignroll-dev-2005-06-02.jpg&lt;br /&gt;
rignroll-dev-2005-06-03.jpg&lt;br /&gt;
rignroll-dev-2005-06-04.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Интерьер тягача [[Freightliner_FLD_120_Classic_XL|Freightliner FLD120 Classic XL]]:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2005-06-05.jpg&lt;br /&gt;
rignroll-dev-2005-06-06.jpg&lt;br /&gt;
rignroll-dev-2005-06-07.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Интерьер тягача [[Freightliner Century]]:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2005-06-08.jpg&lt;br /&gt;
rignroll-dev-2005-06-09.jpg&lt;br /&gt;
rignroll-dev-2005-06-10.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Интерьер тягача [[Freightliner Coronado]]:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2005-06-11.jpg&lt;br /&gt;
rignroll-dev-2005-06-12.jpg&lt;br /&gt;
rignroll-dev-2005-06-13.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== август&amp;lt;ref&amp;gt;Источник: [http://web.archive.org/web/20080906091018/http://www.rignroll.ru/index.php?type=dev_id&amp;amp;publ_id=367 новости разработки игры от 25 августа 2005 года с официального сайта игры]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
Расширилась территория игрового мира:&lt;br /&gt;
* Практически завершено моделирование города Санта-Барбара (US101);&lt;br /&gt;
* Практически завершено моделирование города Барстоу (пересечение SR58 и I15);&lt;br /&gt;
* Практически завершено моделирование города Викторвилл (I15);&lt;br /&gt;
* Начато моделирование города Паттерсон (I5);&lt;br /&gt;
* Начато моделирование практически слившихся в один городов-соседей: Ланкастера и знаменитого Палмдейла (SR14) – аэрокосмической столицы Америки. В Палмдейле расположены такие гиганты индустрии, как &amp;quot;Локхид-Мартин&amp;quot;, &amp;quot;Нортоп-Груммэн&amp;quot;, &amp;quot;Рокуэлл&amp;quot;, &amp;quot;Боинг&amp;quot;, &amp;quot;МакДонелл-Дуглас&amp;quot;, &amp;quot;Бритиш Аэроспейс&amp;quot;. Именно здесь проходили предстартовую подготовку американские космические &amp;quot;челноки&amp;quot;.&lt;br /&gt;
* Завершено моделирование участка дорог SR14 и US395 от Мохаве до Лон-Пайна;&lt;br /&gt;
* Завершено моделирование участка дороги I5 от Лос-Анджелеса до Лебека;&lt;br /&gt;
* Завершено моделирование участка дороги US101 от Окснарда до Санта-Барбары;&lt;br /&gt;
* Ведется моделирование дороги I15 на участке между городами Барстоу и Викторвилла;&lt;br /&gt;
* Ведется моделирование дороги SR58 на участке между городами Мохаве и Барстоу;&lt;br /&gt;
&lt;br /&gt;
Обновлен список автомобилей:&lt;br /&gt;
* Построен легковой автомобиль Chrysler Voyager;&lt;br /&gt;
* Разработан интерьер кабины для седельного тягача [[Peterbilt 379]];&lt;br /&gt;
* Разработан интерьер кабины для седельного тягача [[Titan_Ventura|Kenworth W900L]];&lt;br /&gt;
* Разработан интерьер кабины для седельного тягача [[Volvo VNL770]].&lt;br /&gt;
&lt;br /&gt;
'''Chrysler Voyager:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2005-08-01.jpg&lt;br /&gt;
rignroll-dev-2005-08-02.jpg&lt;br /&gt;
rignroll-dev-2005-08-03.jpg&lt;br /&gt;
rignroll-dev-2005-08-04.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Интерьер [[Peterbilt 379]]:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2005-08-05.jpg&lt;br /&gt;
rignroll-dev-2005-08-06.jpg&lt;br /&gt;
rignroll-dev-2005-08-07.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Интерьер [[Titan_Ventura|Kenworth W900L]]:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2005-08-09.jpg&lt;br /&gt;
rignroll-dev-2005-08-10.jpg&lt;br /&gt;
rignroll-dev-2005-08-11.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Интерьер [[Volvo VNL770]]:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
VNL770int3.jpg&lt;br /&gt;
VNL770int1.jpg&lt;br /&gt;
VNL770int2.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ноябрь&amp;lt;ref&amp;gt;Источник: [http://web.archive.org/web/20080906091135/http://www.rignroll.ru/index.php?type=dev_id&amp;amp;publ_id=379 новости разработки игры от 3 ноября 2005 года с официального сайта игры]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
Расширилась территория игрового мира:&lt;br /&gt;
* Практически завершено моделирование города Палмдейл (SR14);&lt;br /&gt;
* Продолжается моделирование города Ланкастер (SR14);&lt;br /&gt;
* Практически завершено моделирование города Паттерсон (I5);&lt;br /&gt;
* Начато моделирование столицы Силиконовой долины города Сан-Хосе (US101);&lt;br /&gt;
* Завершено моделирование участка дорог I15 от Барстоу до Викторвилла;&lt;br /&gt;
* Завершено моделирование участка дороги SR58 от Мохаве до Барстоу;&lt;br /&gt;
* Ведется моделирование дорог I10, I15 на участке Лос-Анджелес – Викторвилл;&lt;br /&gt;
* Ведется моделирование дороги SR14 на участке Лос-Анджелес – Палмдейл;&lt;br /&gt;
* Ведется моделирование дороги SR14 на участке Палмдейл – Мохаве;&lt;br /&gt;
* Ведется моделирование дороги US395 на участке Лон-Пайн – Бишоп;&lt;br /&gt;
* Ведется моделирование дороги US101 на участке Санта-Барбара – Атаскадеро.&lt;br /&gt;
&lt;br /&gt;
Обновлен список автомобилей:&lt;br /&gt;
* Разработаны модели экстерьера и интерьера седельного тягача [[Sterling A9500S]];&lt;br /&gt;
* Построены модели полуприцепов типа &amp;quot;Самосвал&amp;quot;;&lt;br /&gt;
* Построены модели полуприцепов типа &amp;quot;Зерновоз&amp;quot;;&lt;br /&gt;
* Построены модели полуприцепов типа &amp;quot;Скотовоз&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Интерьер [[Sterling A9500S]]:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2005-11-01.jpg&lt;br /&gt;
rignroll-dev-2005-11-02.jpg&lt;br /&gt;
rignroll-dev-2005-11-03.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Полуприцепы:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2005-11-04.jpg&lt;br /&gt;
rignroll-dev-2005-11-05.jpg&lt;br /&gt;
rignroll-dev-2005-11-06.jpg&lt;br /&gt;
rignroll-dev-2005-11-07.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== декабрь&amp;lt;ref&amp;gt;Источник: [http://web.archive.org/web/20080906091023/http://www.rignroll.ru/index.php?type=dev_id&amp;amp;publ_id=385 новости разработки игры от 22 декабря 2005 года с официального сайта игры]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
Расширилась территория игрового мира:&lt;br /&gt;
* Практически завершено моделирование города Сан-Хосе (US101);&lt;br /&gt;
* Практически завершено моделирование города Ланкастер (SR14);&lt;br /&gt;
* Начато моделирование города Юкайа (US101);&lt;br /&gt;
* Завершено моделирование дорог I10, I15 на участке Лос-Анджелес – Мохаве;&lt;br /&gt;
* Завершено моделирование дороги SR14 на участке Лос-Анджелес – Палмдейл;&lt;br /&gt;
* Завершено моделирование дороги SR14 на участке Палмдейл – Мохаве;&lt;br /&gt;
* Завершено моделирование дороги US395 на участке Лон-Пайн – Бишоп;&lt;br /&gt;
* Завершено моделирование дороги US101 на участке Санта-Барбара – Атаскадеро;&lt;br /&gt;
* Ведется моделирование дороги US101 на участке Атаскадеро – Гринфилд;&lt;br /&gt;
* Ведется моделирование дороги US101 на участке Гринфилд – Сан-Хосе;&lt;br /&gt;
* Ведется моделирование дороги SR99 на участке Фресно – Мерсед;&lt;br /&gt;
* Ведется моделирование дороги US395 на участке Бишоп – Бриджпорт.&lt;br /&gt;
&lt;br /&gt;
Обновлен список автомобилей:&lt;br /&gt;
* Разработана модель интерьера седельного тягача [[Navistar 9300|International 9300 Classic Eagle]];&lt;br /&gt;
* Разработана модель интерьера седельного тягача [[Навистар_Игл#Грузовик_в_Дальнобойщиках_3|International 9900ix]];&lt;br /&gt;
* Разработана модель пикапа Chevrolet Avalanche.&lt;br /&gt;
&lt;br /&gt;
'''Интерьер [[Navistar 9300|International 9300 Classic Eagle]]:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
I9300-salon-0.jpg&lt;br /&gt;
I9300-salon-1.jpg&lt;br /&gt;
I9300-salon-2.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Интерьер [[Навистар_Игл#Грузовик_в_Дальнобойщиках_3|International 9900ix]]:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
I9900ix-interior-0.jpg&lt;br /&gt;
I9900ix-interior-2.jpg&lt;br /&gt;
I9900ix-interior-1.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2006 год ==&lt;br /&gt;
=== март&amp;lt;ref&amp;gt;Источник: [http://web.archive.org/web/20080906091028/http://www.rignroll.ru/index.php?type=dev_id&amp;amp;publ_id=394 новости разработки игры от 24 марта 2006 года с официального сайта игры]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
Продолжилось развитие сети дорог на территории игрового мира:&lt;br /&gt;
* Завершено моделирование дороги US101 на участке Атаскадеро – Гринфилд;&lt;br /&gt;
* Завершено моделирование дороги US101 на участке Гринфилд – Сан-Хосе;&lt;br /&gt;
* Завершено моделирование дороги SR99 на участке Фресно – Мерсед;&lt;br /&gt;
* Завершено моделирование дороги US395 на участке Бишоп – Бриджпорт;&lt;br /&gt;
* Завершено моделирование дороги I80 на участке Сан-Франциско – Окленд, проходящей по знаменитому двухъярусному мосту Bay Bridge через залив Сан-Франциско и &amp;quot;Остров сокровищ&amp;quot; (Treasure Island);&lt;br /&gt;
* Ведется моделирование дороги I80 на участке, соединяющем Окленд со столицей штата Калифорния – городом Сакраменто;&lt;br /&gt;
* Ведется моделирование дороги SR41 на участке Атаскадеро – Кеттлмен-Сити;&lt;br /&gt;
* Ведется моделирование дороги SR41 на участке Кеттлмен-Сити – Фресно;&lt;br /&gt;
* Ведется моделирование дороги US101 на участке Юкайа – Легетт;&lt;br /&gt;
* Ведется моделирование дороги US101 на участке Легетт – Юрика через горный массив Redwood, покрытый величественными гигантскими секвоями. Именно здесь находится так называемая &amp;quot;Алея Гигантов&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Обновлен список автомобилей:&lt;br /&gt;
* Разработана модель интерьера седельного тягача [[Mack CH603]];&lt;br /&gt;
* Разработана модель интерьера седельного тягача [[Titan_El_Dorado|Kenworth T600]];&lt;br /&gt;
* Разработана модель микроавтобуса Chevrolet Express;&lt;br /&gt;
* Разработана модель полуприцепа с тентом (Curtainsider).&lt;br /&gt;
&lt;br /&gt;
'''Интерьер [[Mack CH603]]:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
MackCH603salon.jpg&lt;br /&gt;
MackCH603salon2.jpg&lt;br /&gt;
MackCH603salon3.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Интерьер [[Titan_El_Dorado|Kenworth T600]]:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2006-03-01.jpg&lt;br /&gt;
rignroll-dev-2006-03-02.jpg&lt;br /&gt;
rignroll-dev-2006-03-03.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== июнь&amp;lt;ref&amp;gt;Источник: [http://web.archive.org/web/20080906091034/http://www.rignroll.ru/index.php?type=dev_id&amp;amp;publ_id=403 новости разработки игры от 29 июня 2006 года с официального сайта игры]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
Завершено моделирование самого большого города Калифорнии – Лос-Анджелеса. Таким образом, завершено моделирование всех городов игрового мирa. Практически закончено моделирование Южной и Центральной Калифорнии. Оставшиеся дороги Северной Калифорнии находятся в активной фазе разработки.&lt;br /&gt;
&lt;br /&gt;
Ведутся работы по дизайну искусственного ночного освещения городов:&lt;br /&gt;
Альтурас, Атаскадеро, Барстоу, Бишоп, Бриджпорт, Колфакс, Гринфилд, Кетлмен-Сити, Ланкастер, Лон-Пайн, Мантика, Окснард, Палмдейл, Паттерсон, Реддинг, Рино, Сакраменто, Сан-Франциско, Санта-Барбара, Темекула, Юкайа, Викторвилл, Уивервилл.&lt;br /&gt;
&lt;br /&gt;
Продолжено расширение сети дорог на территории игрового мира:&lt;br /&gt;
* Завершено моделирование дороги I80 на участке Окленд – Сакраменто;&lt;br /&gt;
* Завершено моделирование дороги SR41 на участке Атаскадеро – Кетлмен-Сити;&lt;br /&gt;
* Завершено моделирование дороги на участке Кетлмен-Сити – Фресно;&lt;br /&gt;
* Завершено моделирование дороги US101 на участке Юкайа – Легетт;&lt;br /&gt;
* Завершено моделирование дороги US101 на участке Легетт – Юрика;&lt;br /&gt;
* Построена дорога US101 на участке Сан-Хосе – Сан-Франциско;&lt;br /&gt;
* Построена дорога US101 на участке Сан-Франциско – Юкайа;&lt;br /&gt;
* Построена дорога I5 на участке Кетлмен-Сити – Паттерсон;&lt;br /&gt;
* Построена дорога I5 на участке Паттерсон – Мантика;&lt;br /&gt;
* Построена дорога I5 на участке Паттерсон – Сакраменто;&lt;br /&gt;
* Построена дорога I580, I205, SR120 на участке Окленд – Мантика;&lt;br /&gt;
* Построена дорога SR99 на участке Мерсед – Мантика.&lt;br /&gt;
&lt;br /&gt;
Обновлен список автомобилей:&lt;br /&gt;
* Разработана модель интерьера седельного тягача [[Mack_CX603|Mack CX603 Vision]];&lt;br /&gt;
* Разработана модель интерьера седельного тягача [[Titan_Inyo|Kenworth T800]];&lt;br /&gt;
* Построены модели экстерьера и интерьера седельного тягача [[Western Star 4900EX LowMax]];&lt;br /&gt;
* Разработана модель минивена Dodge Grand Caravan;&lt;br /&gt;
* Разработана модель пикапа Ford F-350 Lariat;&lt;br /&gt;
* Построены модели полуприцепов для сыпучих грузов;&lt;br /&gt;
* Построены модели полуприцепов для перевозки напитков.&lt;br /&gt;
* Расширен список перевозимой тяжелой спецтехники, в числе которой появились трактора, дорожные катки, бульдозеры.&lt;br /&gt;
Завершаются работы над глобальной картой погоды и погодными эффектами.&lt;br /&gt;
&lt;br /&gt;
'''Интерьер [[Mack_CX603|Mack CX603 Vision]]:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
MackCX603salon.jpg&lt;br /&gt;
MackCX603salon2.jpg&lt;br /&gt;
MackCX603salon3.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Интерьер [[Titan_Inyo|Kenworth T800]]:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2006-06-01.jpg&lt;br /&gt;
rignroll-dev-2006-06-02.jpg&lt;br /&gt;
rignroll-dev-2006-06-03.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Интерьер [[Western Star 4900EX LowMax]]:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2006-06-04.jpg&lt;br /&gt;
rignroll-dev-2006-06-05.jpg&lt;br /&gt;
rignroll-dev-2006-06-06.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ford F-350:'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2006-06-07.jpg&lt;br /&gt;
rignroll-dev-2006-06-08.jpg&lt;br /&gt;
rignroll-dev-2006-06-09.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== декабрь&amp;lt;ref&amp;gt;Источник: [http://web.archive.org/web/20080906091038/http://www.rignroll.ru/index.php?type=dev_id&amp;amp;publ_id=453 новости разработки игры от 29 декабря 2006 года с официального сайта игры]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
Расширена сеть дорог:&lt;br /&gt;
* Завершено моделирование дороги I80 на участке Сакраменто – Колфакс;&lt;br /&gt;
* Завершено моделирование дороги I80 на участке Колфакс – Рино;&lt;br /&gt;
* Завершено моделирование дороги I5 на участке Сакраменто – Орленд;&lt;br /&gt;
* Завершено моделирование дороги I5 на участке Орленд – Реддинг;&lt;br /&gt;
* Завершено моделирование дороги SR299 на участке Юрика – Уивервилл;&lt;br /&gt;
* Завершено моделирование дороги SR299 на участке Уивервилл – Реддинг;&lt;br /&gt;
* Завершено моделирование дороги SR299 на участке Реддинг – Барни;&lt;br /&gt;
* Завершено моделирование дороги SR299 на участке Барни – Альтурас;&lt;br /&gt;
* Завершено моделирование дороги US395 на участке Бриджпорт – Минден;&lt;br /&gt;
* Завершено моделирование дороги US395 на участке Минден – Рино;&lt;br /&gt;
* Завершено моделирование дороги US395 на участке Рино – Стандиш;&lt;br /&gt;
* Завершено моделирование дороги US395 на участке Стандиш – Альтурас;&lt;br /&gt;
Таким образом, закончено моделирование городов и дорог игрового мира.&amp;lt;br&amp;gt;&lt;br /&gt;
Завершен дизайн искусственного ночного освещения городов. Ведется активное тестирование и исправление ошибок на всей огромной территории игры.&lt;br /&gt;
&lt;br /&gt;
Обновлен список автомобилей:&lt;br /&gt;
* Разработана модель седельного тягача Peterbilt 378;&lt;br /&gt;
* Разработана модель грузовика Peterbilt 378 в кузовном исполнении;&lt;br /&gt;
* Разработана модель автомобиля Chevrolet Cavalier с кузовом купе;&lt;br /&gt;
* Разработана модель среднего грузовика GMC Topkick C4500;&lt;br /&gt;
* Разработана модель среднего грузовика GMC Topkick C8500;&lt;br /&gt;
* Построены новые модели полуприцепов для сыпучих грузов;&lt;br /&gt;
* Построены модели полуприцепов для перевозки бруса, бревен и труб.&lt;br /&gt;
&lt;br /&gt;
Расширен список перевозимой тяжелой спецтехники, в числе которой появились комбайн, бойлер, газовая турбина.&lt;br /&gt;
Введены специальные типы раскрасок машин – &amp;quot;хамелеон&amp;quot; и &amp;quot;металлик&amp;quot;.&lt;br /&gt;
Полностью введена в игру система повреждений и ремонтов машин.&lt;br /&gt;
Разработаны и введены в игру спортивные состязания водителей-дальнобойщиков.&lt;br /&gt;
Разработано главное меню игры.&lt;br /&gt;
Завершаются работы по сохранению/восстановлению сеансов игры.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2006-12-01.jpg&lt;br /&gt;
rignroll-dev-2006-12-02.jpg&lt;br /&gt;
rignroll-dev-2006-12-03.jpg&lt;br /&gt;
rignroll-dev-2006-12-04.jpg&lt;br /&gt;
rignroll-dev-2006-12-05.jpg&lt;br /&gt;
rignroll-dev-2006-12-06.jpg&lt;br /&gt;
rignroll-dev-2006-12-07.jpg&lt;br /&gt;
rignroll-dev-2006-12-08.jpg&lt;br /&gt;
rignroll-dev-2006-12-09.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== без конкретной даты ===&lt;br /&gt;
* Из игры удалён тягач [[Kenworth K100E]]&amp;lt;ref&amp;gt;Это лишь предположение, основанное на копиях сайта с сервиса Web Archive. Тягач пропал с сайта в промежутке между сентябрём 2005 и февралём 2007 года. Возможно, Sterling A9500S был введён в игру как раз вместо Kenworth K100E.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2007 год ==&lt;br /&gt;
=== сентябрь&amp;lt;ref&amp;gt;Источник: [http://web.archive.org/web/20080906091043/http://www.rignroll.ru/index.php?type=dev_id&amp;amp;publ_id=469 новости разработки игры от 8 сентября 2007 года с официального сайта игры]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
* Игровой мир прошел стадию технического тестирования (тестирование на непротиворечивость объектов территории), в настоящий момент ведется перекрестное художественное тестирование игрового мира.&lt;br /&gt;
* Ведется тестирование всего парка машин и одновременно с этим ведется доработка системы апгрейдов для каждой из машин и системы их территориального распределения по станциям технического обслуживания.&lt;br /&gt;
* Завершена разработка системы миссий. Ведется ее тестирование, исправление ошибок и наполнение контентом.&lt;br /&gt;
* Завершена разработка инсталлятора игры. Ведется тестирование на разных платформах.&lt;br /&gt;
* Ведется разработка системы автоматических тестов на непротиворечивость различных подсистем игры заданным параметрам.&lt;br /&gt;
* Завершены работы по оптимизации игры под мультипроцессорные платформы.&lt;br /&gt;
* Ведутся работы по масштабированию возможностей игры под различные аппаратные конфигурации.&lt;br /&gt;
* На стадии завершения подготовка персонажей игры под различные типы освещения.&lt;br /&gt;
* Ведется разработка сценарийной подсистемы игры.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2007-sep-1.jpg&lt;br /&gt;
rignroll-dev-2007-sep-2.jpg&lt;br /&gt;
rignroll-dev-2007-sep-3.jpg&lt;br /&gt;
rignroll-dev-2007-sep-4.jpg&lt;br /&gt;
rignroll-dev-2007-sep-5.jpg&lt;br /&gt;
rignroll-dev-2007-sep-6.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ноябрь&amp;lt;ref&amp;gt;Источник: [http://web.archive.org/web/20080622070430/http://www.rignroll.ru/index.php?type=dev_id&amp;amp;publ_id=479 новости разработки игры от 13 ноября 2007 года с официального сайта игры]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
* Продолжено художественное тестирование игрового мира и исправление художественных недочетов, допущенных при моделировании территории.&lt;br /&gt;
* Продолжено тестирование парка машин и введение системы индивидуальных апгрейдов для различных марок грузовиков.&lt;br /&gt;
* Введен механизм территориального распределения ассортимента станций технического обслуживания в соответствии с наличием реальных представительств компаний-производителей на имитируемой территории.&lt;br /&gt;
* Завершены работы по тестированию, отладке и оптимизации игры под мультипроцессорные платформы.&lt;br /&gt;
* Демонстрационная версия игры отправлена в лабораторию корпорации Intel для проведения тестов на производительность.&lt;br /&gt;
* Продолжена разработка сценарийной подсистемы игры.&lt;br /&gt;
* Завершена разработка дополнительного режима игры – &amp;quot;Одиночный заказ&amp;quot;. Обладая определенной сумой денег, игрок должен будет выполнить один заказ для выбранной им торговой базы на выбранном тягаче. Этот режим демонстрировался на выставке &amp;quot;Игромир–2007&amp;quot; в Москве. После выхода игры разработчики планировали ввести и поддерживать таблицу лучших результатов на официальном сайте игры. Планировалось, что лучшие результаты режима будут отражены в виде &amp;quot;Горячей десятки&amp;quot; по трем номинациям: &amp;quot;Лучший дальнобойщик&amp;quot; – игрок, добившийся максимальной прибыли; &amp;quot;Лучший гонщик&amp;quot; – игрок, показавший максимальную среднюю скорость; и &amp;quot;Лучший доставщик&amp;quot; – самый аккуратный водитель.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2007-nov-1.jpg&lt;br /&gt;
rignroll-dev-2007-nov-2.jpg&lt;br /&gt;
rignroll-dev-2007-nov-3.jpg&lt;br /&gt;
rignroll-dev-2007-nov-4.jpg&lt;br /&gt;
rignroll-dev-2007-nov-5.jpg&lt;br /&gt;
rignroll-dev-2007-nov-6.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Некоторые фотографии с выставки &amp;quot;Игромир-2007&amp;quot;:'''&amp;lt;ref&amp;gt;Источник: [https://web.archive.org/web/20130413052225/http://forum.1cpublishing.eu/showthread.php?t=2225 форум 1C Publishing]&amp;lt;/ref&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2007-igromir-8.jpg&lt;br /&gt;
rignroll-dev-2007-igromir-1.jpg&lt;br /&gt;
rignroll-dev-2007-igromir-2.jpg&lt;br /&gt;
rignroll-dev-2007-igromir-3.jpg&lt;br /&gt;
rignroll-dev-2007-igromir-4.jpg&lt;br /&gt;
rignroll-dev-2007-igromir-7.jpg&lt;br /&gt;
rignroll-dev-2007-igromir-6.jpg&lt;br /&gt;
rignroll-dev-2007-igromir-5.jpg&lt;br /&gt;
rignroll-dev-2007-igromir-9.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== декабрь&amp;lt;ref&amp;gt;Источник: [http://web.archive.org/web/20080706001723/http://www.rignroll.ru/index.php?type=dev_id&amp;amp;publ_id=484 новости разработки игры от 28 декабря 2007 года с официального сайта игры]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
* Ведется тестирование экономической системы игры и балансировка основных экономических параметров объектов игрового мира (торговых баз, транспортных компаний, автодилеров, кадровых агентств, наемных водителей и т.д.).&lt;br /&gt;
* Ведется тестирование, отладка и балансировка спортивной подсистемы игры (чемпионат Калифорнии среди дальнобойщиков).&lt;br /&gt;
* Проверяются и балансируются маршруты и параметры конкретных серий гонок, параметры рейтинговой системы продвижения игрока, уточняются ходовые параметры машин различных моделей и влияние на эти параметры устанавливаемых апгрейдов.&lt;br /&gt;
* Демонстрационная версия игры проверена в лаборатории корпорации Intel на предмет оптимизации под мультипроцессорные платформы. Подтверждено увеличение производительности игры до 70–80% на многоядерных системах.&lt;br /&gt;
* Продолжается тестирование и отладка территории игрового мира и парка машин.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
rignroll-dev-2007-dec-1.jpg&lt;br /&gt;
rignroll-dev-2007-dec-2.jpg&lt;br /&gt;
rignroll-dev-2007-dec-3.jpg&lt;br /&gt;
rignroll-dev-2007-dec-4.jpg&lt;br /&gt;
rignroll-dev-2007-dec-5.jpg&lt;br /&gt;
rignroll-dev-2007-dec-6.jpg&lt;br /&gt;
rignroll-dev-2007-dec-7.jpg&lt;br /&gt;
rignroll-dev-2007-dec-8.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2008 год ==&lt;br /&gt;
=== ноябрь&amp;lt;ref&amp;gt;[http://web.archive.org/web/20090121220007/http://rignroll.ru/index.php?type=new_id&amp;amp;publ_id=502 Источник]&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
6–9 ноября 2008 года &amp;quot;Дальнобойщики 3&amp;quot; демонстрировались на крупнейшей российской выставке &amp;quot;Игромир&amp;quot;. В качестве выставочной версии использовалась практически полная версия игры, из которой в целях безопасности была убрана некоторая часть возможностей.&lt;br /&gt;
&lt;br /&gt;
== 2009 год ==&lt;br /&gt;
=== ноябрь ===&lt;br /&gt;
18 ноября 2009 - выход игры.&lt;br /&gt;
&lt;br /&gt;
{{Дб3}}&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=%D0%A1%D0%BE%D0%B2%D0%B5%D1%82%D1%8B_%D0%B8_%D1%81%D0%B5%D0%BA%D1%80%D0%B5%D1%82%D1%8B_(%D0%94%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B1%D0%BE%D0%B9%D1%89%D0%B8%D0%BA%D0%B8_3)&amp;diff=5526</id>
		<title>Советы и секреты (Дальнобойщики 3)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=%D0%A1%D0%BE%D0%B2%D0%B5%D1%82%D1%8B_%D0%B8_%D1%81%D0%B5%D0%BA%D1%80%D0%B5%D1%82%D1%8B_(%D0%94%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B1%D0%BE%D0%B9%D1%89%D0%B8%D0%BA%D0%B8_3)&amp;diff=5526"/>
		<updated>2025-12-05T12:38:43Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: Добавил немного про скрытые функции игры - свободную камеру и работу в окне&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_3]]&lt;br /&gt;
==Геймплейные советы==&lt;br /&gt;
=== Как открыть филиал? ===&lt;br /&gt;
&lt;br /&gt;
Количество филиалов, которые вы можете открыть, зависит от оборота вашей компании.&lt;br /&gt;
Изначально вы можете открыть только один филиал (дополнительно к центральному офису&lt;br /&gt;
в Окснарде). Филиалы открываются в офисе на вкладке &amp;quot;Управление филиалами&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Замечание:''' Если вы не можете открыть ни один филиал (кроме филиала в Окснарде) или при нажатии на кнопку &amp;quot;Применить&amp;quot; на вкладке &amp;quot;Управление филиалами&amp;quot; не происходит ничего, то у вас контрафактный диск. Подробнее об этом читайте [https://vk.com/page-6026467_16502300 здесь]. Единственный возможный способ устранить эту проблему - купить лицензию. &lt;br /&gt;
&lt;br /&gt;
=== Как поднять оборот компании? ===&lt;br /&gt;
&lt;br /&gt;
Поднять оборот компании можно двумя способами:&lt;br /&gt;
&lt;br /&gt;
1. '''Нанимать побольше водителей.''' При таком подходе вам придётся нанять не менее 15 водителей для открытия всех баз в Калифорнии.&lt;br /&gt;
&lt;br /&gt;
2. '''Правильно настроить нанятых водителей.''' При таком подходе вам придётся нанять не менее 9 водителей для открытия всех баз в Калифорнии. Как правильно настраивать нанятых водителей поговорится в следующих разделах. &lt;br /&gt;
&lt;br /&gt;
=== Как правильно настроить нанятых водителей? ===&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы правильно настроить водителей, проделайте следующие операции (в скобочках указано место на скриншоте):&lt;br /&gt;
&lt;br /&gt;
[[Файл:d3_setup_truck_driver.jpg|512px]]&lt;br /&gt;
&lt;br /&gt;
1. Выберете водителя в списке (1).&lt;br /&gt;
&lt;br /&gt;
2. Отключите для него автоматическую настройку предпочитаемых заказов. Для этого отключите переключатель (2).&lt;br /&gt;
&lt;br /&gt;
3. Передвигайте ползунок типа заказа (3) так, чтобы в зарплата $/день (6) достигла своего наибольшего значения из возможных.&lt;br /&gt;
&lt;br /&gt;
4. Передвигайте ползунок хрупкости груза (4) так, чтобы в зарплата $/день (6) достигла своего наибольшего значения из возможных (зарплата суммируется, поэтому её начальное значение - то, что вы достигли в предыдущем пункте, поэтому старайтесь не уменьшить показатель).&lt;br /&gt;
&lt;br /&gt;
5. Передвигайте ползунок дальности рейсов (5) так, чтобы в зарплата $/день (6) достигла своего наибольшего значения из возможных (зарплата суммируется, поэтому её начальное значение - то, что вы достигли в предыдущем пункте, поэтому старайтесь не уменьшить показатель).&lt;br /&gt;
&lt;br /&gt;
6. Обязательно нажмите &amp;quot;Применить всё&amp;quot;!&lt;br /&gt;
&lt;br /&gt;
7. Проделайте пункты 1 - 6 для всех своих водителей.&lt;br /&gt;
&lt;br /&gt;
8. Настройка завершена.&lt;br /&gt;
&lt;br /&gt;
=== Как получить груз? ===&lt;br /&gt;
&lt;br /&gt;
Грузы можно получить на складе или по СВ-рации. Если вы видите где-то полуприцеп, но задания по СВ-рации вы на него не получали, взять его будет невозможно! &lt;br /&gt;
&lt;br /&gt;
=== Где находится склад? ===&lt;br /&gt;
&lt;br /&gt;
Склады на карте отмечены зелёными крючками', чтобы до них добраться следуйте по указателю &amp;quot;&amp;lt;имя города&amp;gt; Warehouse&amp;quot;.&lt;br /&gt;
' - Если крючки серые, то взять заказ на этой базе невозможно, так как она не входит в область покрытия филиалов. Открывайте побольше филиалов для расширения зоны влияния.&lt;br /&gt;
&lt;br /&gt;
==Скрытые функции игры==&lt;br /&gt;
=== Свободная камера ===&lt;br /&gt;
&lt;br /&gt;
Чтобы активировать свободную камеру, нужно:&amp;lt;/br&amp;gt;&lt;br /&gt;
1) В папке MonsterCup (если игра с DLC) или GameWorld (если игра без DLC) создать файл wdb.ini со следующим содержимым:&amp;lt;/br&amp;gt;&lt;br /&gt;
 [debug]&lt;br /&gt;
 enableConsole = 1&lt;br /&gt;
&lt;br /&gt;
2) Сохранить файл, запустить игру в любом режиме. После загрузки включить режим внешней камеры, настроить фокусное расстояние по желанию.&amp;lt;/br&amp;gt;&lt;br /&gt;
3) Нажать на клавишу '~', активируется консоль.&amp;lt;/br&amp;gt;&lt;br /&gt;
4) Ввести команду &amp;quot;freecam&amp;quot; (без кавычек). Активируется режим свободной камеры.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Управление:&lt;br /&gt;
* E/D - вперёд/назад&lt;br /&gt;
* F/S - вправо/влево&lt;br /&gt;
* Если зажать &amp;lt;Shift&amp;gt; до нажатия на E/D/F/S, то движение будет ускоренным.&lt;br /&gt;
* Для возвращения в обычный режим нужно нажать кнопку переключения режима камеры (работает только в том случае, если камера недалеко от грузовика игрока).&lt;br /&gt;
&lt;br /&gt;
=== Оконный режим ===&lt;br /&gt;
&lt;br /&gt;
Чтобы запустить игру в оконном режиме, нужно в папке MonsterCup (если игра с DLC) или GameWorld (если игра без DLC) создать файл wdb.ini со следующим содержимым:&amp;lt;/br&amp;gt;&lt;br /&gt;
 [env]&lt;br /&gt;
 fullscreen = 0&lt;br /&gt;
&lt;br /&gt;
Важно! В таком режиме игра работает нестабильно и даже может '''вызвать аварийное завершение работы системы с BSOD'''. Использовать на свой страх и риск!&lt;br /&gt;
&lt;br /&gt;
== Краткое руководство по американским правилам дорожного движения ==&lt;br /&gt;
Информация с [http://rignroll.ru официального сайта игры]&lt;br /&gt;
=== Предисловие ===&lt;br /&gt;
[[Файл:D3 tips p1.jpg|справа]]&lt;br /&gt;
Американские правила дорожного движения несколько отличаются от российских. Прежде всего нужно отметить, что не существует &amp;quot;общеамериканских&amp;quot; правил. В каждом штате США действуют свои правила дорожного движения – построенные на основе общих принципов, но тем не менее – свои собственные, в чем-то отличающиеся от правил, которые приняты в других штатах. Поэтому то, что разрешено в Калифорнии, может оказаться под запретом где-нибудь в Неваде или Орегоне, и наоборот.&lt;br /&gt;
&lt;br /&gt;
Главное в американских ПДД – это не закрепление каких-то формальных норм и положений, разрешений и запретов, а следование здравому смыслу. Правила нацелены на то, чтобы максимально сократить количество помех на пути каждого участника дорожного движения.&lt;br /&gt;
&lt;br /&gt;
Скажем, вопрос о праве преимущественного проезда через нерегулируемые перекрестки в общем случае решается по принципу: &amp;quot;Первым приехал – первым уехал&amp;quot;. На четырехстопном перекрестке это выглядит забавно: машины поочередно останавливаются на стоп-линиях, а затем в той же последовательности трогаются и проезжают перекресток. Если есть необходимость, то приоритеты для транспортных средств определяются знаками, &amp;quot;уступи дорогу&amp;quot; – &amp;quot;STOP&amp;quot; или &amp;quot;YIELD&amp;quot;.&lt;br /&gt;
[[Файл:D3 tips school bus.jpg|центр]]&lt;br /&gt;
В Калифорнии (в отличие от России) в общем случае разрешается выполнение поворота направо на красный, то есть запрещающий (!), сигнал светофора, а на пересечении дорог с односторонним движением – и выполнение поворота налево. От водителя, совершающего поворот, требуется лишь соблюдение разумных мер предосторожности – он должен пропустить транспортные средства и пешеходов, находящихся на его пути. Да еще можно увидеть красный мигающий сигнал светофора, который по своему значению аналогичен знаку &amp;quot;STOP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Из нашей практики можно сказать, что ограничения скоростного режима в США часто кажутся более естественными, чем в России. Видимо, срабатывает тот же принцип – пропустить по дороге как можно больше машин, не создавая помех для их движения. Например, на горных серпантинах в условиях ограниченной видимости можно было смело придерживаться рекомендованной скорости (знаки там стоят перед каждым крутым поворотом), а в случае превышения всего на 10–15% уже терялась уверенность в том, что удастся удержать машину на дороге.&lt;br /&gt;
&lt;br /&gt;
Логика основных скоростных ограничений в американских и российских ПДД примерно одна и та же, хотя формально это не так. Разрешенная скорость по умолчанию – 65 миль/час (~105 км/час), на двухполосных дорогах без разделительной полосы и при движении с прицепом – 55 миль/час (~89 км/час). Аналогом российской автомагистрали является фривей, на котором чаще всего действует ограничение скорости 65 миль/час. Для водителя – это участок дороги, ограниченный специальными знаками: &amp;quot;FREEWAY ENTRANCE&amp;quot; и &amp;quot;FREEWAY ENDS HERE&amp;quot;. Фривей может проходить прямо через населенный пункт, не ужесточая ограничений в скорости. Ближайшей аналогией &amp;quot;населенного пункта&amp;quot; являются &amp;quot;business district&amp;quot; или &amp;quot;residence district&amp;quot;. Если нет дополнительных знаков, то скорость в нем должна быть ограничена до 25 миль/час (~40 км/час). Ближайшим аналогом дорог в &amp;quot;жилых зонах&amp;quot; или прилегающих территорий являются &amp;quot;alley&amp;quot;, где действует ограничение – 15 миль/час (~24 км/час).&lt;br /&gt;
&lt;br /&gt;
На американских дорогах нередко возникают ситуации, когда расчетливость и здравый смысл имеют негласный приоритет даже по сравнению с самими правилами движения. Например, в небольших городах пешеходные переходы обычно оборудованы светофорами с кнопочкой: чтобы перейти улицу, пешеход должен нажать на нее и включить себе зеленый свет. Однако этим мало кто пользуется – люди спокойно переходят через дорогу на красный свет, а проезжающие автомобили не пугают пешеходов-нарушителей сигналами, а притормаживают и уступают им дорогу. И дело вовсе не в какой-то особой учтивости американских водителей, а в элементарной расчетливости. Водителю гораздо выгоднее слегка притормозить и позволить пешеходу перейти дорогу, чем настаивать на своем праве преимущественного проезда – ведь в противном случае он вынудит пешехода нажать кнопку светофора, а сам должен будет стоять на красном свете.&lt;br /&gt;
&lt;br /&gt;
Притча о том, что &amp;quot;российскому водителю не столь важно самому побыстрее добраться до места назначения, сколько не дать это сделать другим&amp;quot;, в американском варианте звучит с точностью до наоборот: &amp;quot;не создавай помех другим, и тогда на твоем собственном пути их будет меньше&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Главные заповеди водителя===&lt;br /&gt;
[[Файл:D3 tips p2.jpg|справа]]&lt;br /&gt;
Для безопасного управления транспортными средствами водитель должен подчиняться Правилам дорожного движения. Эти правила определяют, где и когда можно передвигаться на автомобиле. Чтобы не нарушать правила движения, водитель обязан знать сигналы светофора, а также значение дорожных знаков и разметки. Водитель должен понимать законы и правила, определяющие право преимущественного проезда (right-of-way) и порядок использования полос движения на дорогах. Водитель должен знать правила, регулирующие порядок остановки и стоянки транспортных средств, и следовать этим правилам.&lt;br /&gt;
&lt;br /&gt;
'''Главные заповеди водителя'''&lt;br /&gt;
Вождение – это привилегия, а не право.&lt;br /&gt;
&lt;br /&gt;
Относитесь к другим водителями так же, как вы хотели бы, чтобы относились к вам.&lt;br /&gt;
&lt;br /&gt;
Чтобы избежать столкновения, подавайте сигналы, даже если вы не видите поблизости другие транспортные средства. Другой водитель, возможно, тоже не видит вас.&lt;br /&gt;
&lt;br /&gt;
Не рассчитывайте на то, что другой водитель &amp;quot;поделится&amp;quot; с вами пространством на дороге.&lt;br /&gt;
&lt;br /&gt;
Никогда не настаивайте на своем праве преимущественного проезда.&lt;br /&gt;
&lt;br /&gt;
Прежде чем сесть за руль, подумайте об экономии топлива.&lt;br /&gt;
&lt;br /&gt;
Бдительность на дороге поможет вам избежать дорожно-транспортных происшествий.&lt;br /&gt;
&lt;br /&gt;
Осторожность и предусмотрительность за рулем – залог водительского долголетия.&lt;br /&gt;
&lt;br /&gt;
===Сигналы светофора===&lt;br /&gt;
[[Файл:D3 tips p3.gif|справа]]&lt;br /&gt;
Сигналы светофора, дорожные знаки и правила преимущественного проезда определяют порядок движения на перекрестках улиц и пересечениях дорог.&lt;br /&gt;
&lt;br /&gt;
[[Файл:D3 tips red.gif|слева]]&lt;br /&gt;
'''Красный''' – запрещает движение кроме поворота направо. На пересечении дорог с односторонним движением разрешается поворот налево. Выполнение поворотов на красный сигнал светофора может быть запрещено специальными знаками, установленными на перекрестке (пересечении) дорог. Перед выполнением поворота водитель должен остановиться и пропустить пешеходов и транспортные средства, находящиеся на его пути.&lt;br /&gt;
&lt;br /&gt;
[[Файл:D3 tips red arrow.gif|слева]]&lt;br /&gt;
'''Красная стрелка''' – запрещает движение (выполнение поворота) по направлению указателя при любом сигнале основного светофора.&lt;br /&gt;
&lt;br /&gt;
[[Файл:D3 tips red blink.gif|слева]]&lt;br /&gt;
'''Красный мигающий''' – требует остановки, после которой водитель может продолжить безопасное движение в соответствии с правилами преимущественного проезда. По своему значению аналогичен знаку STOP.&lt;br /&gt;
&lt;br /&gt;
Мигающие желтые или красные сигнальные огни школьного автобуса, которые включаются при посадке и высадке пассажиров, для всех остальных участников движения равнозначны по своему действию сигналам светофора: требуют повышенного внимания и готовности остановиться (желтый) или немедленной остановки (красный). В Калифорнии за нарушение данного пункта ПДД провинившегося водителя ждет весьма строгое наказание - штраф в тысячу долларов или лишение водительских прав сроком на 1 год.&lt;br /&gt;
[[Файл:D3 tips sb lights.gif|центр]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:D3 tips yellow.gif|слева]]&lt;br /&gt;
'''Желтый''' – предупреждает о том, что скоро должен загореться красный свет. На желтый сигнал светофора следует остановиться, если это можно сделать безопасным образом. Если вы не можете остановиться, будьте предельно внимательны при проезде через перекресток.&lt;br /&gt;
&lt;br /&gt;
[[Файл:D3 tips yellow blink.gif|слева]]&lt;br /&gt;
'''Желтый мигающий''' – призывает водителя быть осмотрительным. Нужно снизить скорость и повысить внимание.&lt;br /&gt;
&lt;br /&gt;
[[Файл:D3 tips yellow arrow.gif|слева]]&lt;br /&gt;
'''Желтая стрелка''' – предупреждает о завершении времени для выполнения безопасного поворота и предстоящей смене сигнала.&lt;br /&gt;
&lt;br /&gt;
[[Файл:D3 tips green.gif|слева]]&lt;br /&gt;
'''Зеленый''' – разрешает движение. Предварительно водитель должен убедиться в возможности беспрепятственного проезда через перекресток: водитель обязан уступить дорогу транспортным средствам, завершающим движение через перекресток и пешеходам, не закончившим переход проезжей части данного направления. Поворот налево разрешен при условии достаточного пространства для его выполнения и отсутствии встречного движения.&lt;br /&gt;
&lt;br /&gt;
Запрещается выезжать на пересечение проезжих частей при отсутствии достаточного пространства для завершения проезда через перекресток до того, как загорится красный свет.&lt;br /&gt;
&lt;br /&gt;
[[Файл:D3 tips green arrow.gif|слева]]&lt;br /&gt;
'''Зеленая стрелка''' – разрешает движение по направлению указателя. Позволяет выполнить безопасный поворот во время действия запрещающего сигнала для встречного транспорта. Предварительно водитель должен пропустить других участников движения, уже находящихся на перекрестке и препятствующих выполнению поворота.&lt;br /&gt;
&lt;br /&gt;
[[Файл:D3 tips non lights.gif|слева]]&lt;br /&gt;
'''Отсутствие сигнала''' – при неработающем светофоре водитель обязан остановиться у перекрестка или пересечения проезжих частей. Водитель может продолжить движение лишь убедившись в его безопасности, то есть дождавшись остановки транспортных средств и пешеходов, двигающихся в поперечном направлении. При отсутствии сигнала светофора действуют правила проезда через нерегулируемый перекресток, по всем направлениям которого установлен знак STOP.&lt;br /&gt;
&lt;br /&gt;
===Дорожные знаки===&lt;br /&gt;
[[Файл:D3 tips p4.jpg|справа]]&lt;br /&gt;
'''Знаки приоритета'''&lt;br /&gt;
&lt;br /&gt;
[[Файл:D3_tips_sign stop.gif|слева]]&lt;br /&gt;
Знак STOP требует полной остановки транспортного средства перед выездом на пешеходный переход или за ограничительную линию. Остановившись у перекрестка или специальной обозначенной ограничительной линии белого цвета, убедитесь в возможности безопасного проезда через перекресток, после чего продолжайте движение.&lt;br /&gt;
&lt;br /&gt;
[[Файл:D3_tips_sign yeld.gif|слева]]&lt;br /&gt;
Знак YIELD предписывает снизить скорость и быть готовым к полной остановке транспортного средства. Пропустив участников движения, пересекающих ваш путь, и убедившись в безопасности, можете продолжать движение.&lt;br /&gt;
&lt;br /&gt;
'''Запрещающие знаки'''&lt;br /&gt;
[[Файл:D3_tips_sign dne.gif|слева]]&lt;br /&gt;
[[Файл:D3_tips_sign ww.gif|слева]]&lt;br /&gt;
Знак DO NOT ENTER запрещает движение вперед. Может устанавливаться вместе со знаком WRONG WAY. Если вы увидите один из этих знаков или оба, вы должны съехать на обочину дороги и остановиться. Скорее всего, вы двигаетесь навстречу транспортному потоку. Убедившись в возможности безопасного разворота, развернитесь и продолжайте движение по дороге в разрешенном направлении.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Предупреждающие знаки'''&lt;br /&gt;
Знаки этого типа информируют водителя об изменении типа дороги и приближении к потенциально опасным участкам, при проезде по которым необходимо уменьшить скорость движения.&lt;br /&gt;
Пример: окончание участка дороги с разделенными полосами и начало участка с двухсторонним движением.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
D3_tips_sign road1.gif|&lt;br /&gt;
D3_tips_sign road2.gif|&lt;br /&gt;
D3_tips_sign road3.gif|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Регулирующие знаки''' (черно-белые) информируют водителя о том, что ему можно и нужно делать. Водитель должен подчиняться указаниям регулирующих знаков.&lt;br /&gt;
[[Файл:D3_tips_sign regul.gif|центр]]&lt;br /&gt;
&lt;br /&gt;
'''Дорожные указатели''' зеленого, голубого или коричневого цвета служат ориентирами для водителя, информируют о наличии по ходу движения тех или иных сервисов, публичных учреждений, достопримечательностей.&lt;br /&gt;
[[Файл:D3_tips_signs guide1.gif|центр]]&lt;br /&gt;
[[Файл:D3_tips_signs guide2.gif|центр]]&lt;br /&gt;
&lt;br /&gt;
===Правила преимущественного проезда===&lt;br /&gt;
[[Файл:D3 tips p5.gif|справа]]&lt;br /&gt;
Соблюдение правил преимущественного проезда необходимо для обеспечения безопасности движения. Эти правила формулируются исходя из соображений здравого смысла и обязательны для выполнения всеми участниками дорожного движения.&lt;br /&gt;
&lt;br /&gt;
'''Никогда не настаивайте на своем праве преимущественного проезда.''' Если другой водитель не уступает вам дорогу даже вопреки правилам движения, будьте разумны и позвольте ему проехать первым. Этим вы предотвратите возможное дорожно-транспортное происшествие и сделаете движение более безопасным.&lt;br /&gt;
&lt;br /&gt;
'''Никогда не пренебрегайте своим правом преимущественного проезда.''' Если другие участники движения уступают вам дорогу, обязательно воспользуйтесь этим. В противном случае ваша нерешительность может привести к необоснованному замедлению движения.&lt;br /&gt;
&lt;br /&gt;
'''Уступайте дорогу пешеходам.''' Обязательно остановитесь у перекрестка или пешеходного перехода, чтобы пропустить пешеходов, находящихся на проезжей части или намеревающихся пересечь ее. Не обгоняйте автомобили, которые останавливаются у перекрестков и пропускают пешеходов, которых вы можете не видеть из-за находящихся перед вами транспортных средств. Помните: даже если у вас есть зрительный контакт с пешеходом, это еще не означает, что он уступит вам право преимущественного движения.&lt;br /&gt;
&lt;br /&gt;
'''Будьте внимательны по отношению к другим водителям.''' Приближаясь к нерегулируемым перекресткам и при отсутствии знаков STOP и YIELD, сбавьте скорость и будьте готовы остановиться. Уступите дорогу транспортным средствам, которые уже пересекают ваш путь или приблизились к перекрестку с правой стороны одновременно с вами. При движении через Т-образное пересечение дорог правом преимущественного проезда обладают транспортные средства, двигающиеся по прямой.&lt;br /&gt;
&lt;br /&gt;
Если знаки STOP установлены по всем сторонам перекрестка, остановитесь первым, а затем продолжайте движение в соответствии с вышеизложенными правилами.&lt;br /&gt;
&lt;br /&gt;
Если вы хотите повернуть налево, помните, что правом преимущественного проезда обладают транспортные средства, двигающиеся по этой же дороге во встречном направлении. Совершайте поворот лишь убедившись в его безопасности.&lt;br /&gt;
&lt;br /&gt;
'''Не меняйте своих решений!''' Если, приближаясь к перекрестку, вы приняли какое-то решение (двигаться прямо или совершить поворот) доводите его до конца. Пытаясь изменить свое решение в последнюю секунду, вы можете создать аварийную ситуацию. Если вы пропустили нужный поворот, продолжайте движение до следующего перекрестка или зоны, где разрешен разворот.&lt;br /&gt;
&lt;br /&gt;
===Ограничения скорости===&lt;br /&gt;
[[Файл:D3 tips p6.gif|справа]]&lt;br /&gt;
Правилами регулирования скорости движения в штате Калифорния установлено, что вы не имеете права двигаться со скоростью, превышающей безопасную для текущих дорожных условий, независимо от того, что указано на знаках ограничения скорости.&lt;br /&gt;
&lt;br /&gt;
'''Максимальная разрешенная скорость.''' На большинстве калифорнийских дорог установлен предел скорости в 65 миль/час (~105 км/час). На некоторых дорогах разрешено движение со скорость до 70 миль/час (~113 км/час), что подтверждается установкой соответствующих знаков. На узких дорогах с двусторонним движением без разделительной полосы разрешенная скорость ограничивается 55 миль/час (~89 км/час). Помните, что все формальные ограничения скорости установлены применительно к идеальным дорожным условиям.&lt;br /&gt;
&lt;br /&gt;
Движение со скоростью, превышающей предельно разрешенную или безопасную для текущих дорожных условий, является грубым нарушением правил движения.&lt;br /&gt;
&lt;br /&gt;
'''Слишком малая скорость.''' Движение с необоснованно малой скоростью, препятствующей нормальному транспортному потоку, считается нарушением правил.&lt;br /&gt;
&lt;br /&gt;
Управляя тяжелым грузовиком, скорость которого ниже, чем у других участников движения, необходимо придерживаться крайнего правого ряда или двигаться по специально отведенной полосе. На многополосных дорогах при отсутствии специальных &amp;quot;низкоскоростных&amp;quot; полос движение разрешено в любом их двух рядов, ближних к правому краю дороги.&lt;br /&gt;
&lt;br /&gt;
'''Специальные ограничения.''' Разрешенная скорость движения вблизи школ, детских игровых площадок и парков ограничивается 25 миль/час (~40 км/час). Такой же предел скорости установлен при движении по большинству городских улиц в деловых и жилых кварталах.&lt;br /&gt;
&lt;br /&gt;
По подъездным дорожкам, ведущим от основных дорог к прилегающим строениям, разрешается движение со скоростью не более 15 миль/час (~24 км/час).&lt;br /&gt;
&lt;br /&gt;
При подъезде к &amp;quot;слепым&amp;quot; перекресткам, где видимость ограничена 100 футами (примерно 30 м) на дистанции в 100 футов от пересечения дорог или улиц, рекомендуется придерживаться скорости не более 15 миль/час. Вы можете двигаться быстрее, если на перекрестке для поперечного направления установлены знаки STOP или YIELD, дающие вам право преимущественного проезда.&lt;br /&gt;
&lt;br /&gt;
'''Скорость и экономия топлива.''' Постоянно следите за скоростью движения, и этим вы сэкономите свои деньги. Минимальный расход топлива достигается при движении с постоянной средней скоростью. Не &amp;quot;дергайте&amp;quot; с места, разгоняйтесь плавно.&lt;br /&gt;
&lt;br /&gt;
На спусках не переключайтесь на &amp;quot;нейтралку&amp;quot;, чтобы сэкономить топливо. Это опасно и является нарушением правил дорожного движения.&lt;br /&gt;
&lt;br /&gt;
=== Разделительные линии. Движение по полосам ===&lt;br /&gt;
[[Файл:D3 tips p7.jpg|справа]]&lt;br /&gt;
'''Белые линии''' – обозначают границы полос движения при наличии двух и более полос, предназначенных для движения в одном направлении.&lt;br /&gt;
&lt;br /&gt;
'''Желтые линии''' – разделяют транспортные потоки противоположных направлений на дорогах с двусторонним движением. Сплошная желтая линия запрещает выезд на встречную полосу для обгона или разворота.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
D3_tips_lines1.jpg|Выезд на встречную полосу для обгона ЗАПРЕЩЕН&lt;br /&gt;
D3_tips_lines2.jpg|Выезд на встречную полосу для обгона ЗАПРЕЩЕН&lt;br /&gt;
D3_tips_lines3.jpg|Выезд на встречную полосу для обгона РАЗРЕШЕН&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Пересечение двойной сплошной желтой линии разрешается только в случае:'''&lt;br /&gt;
&lt;br /&gt;
* выполнения поворота налево на перекрестке, въезде или выезде с фривея на подъездную дорожку;&lt;br /&gt;
* или если правая полоса заблокирована, закрыта для движения.&lt;br /&gt;
[[Файл:D3 tips lines4.gif|центр]]&lt;br /&gt;
&lt;br /&gt;
'''Выбор полосы для движения.''' Двигаясь по многополосной дороге, старайтесь выбрать полосу с наименее плотным транспортным потоком. Если в одном направлении допускается трехрядное движение, обычно рекомендуется придерживаться средней полосы. Если ваша скорость выше, чем у других участников движения, вы собираетесь совершить обгон или левый поворот, занимайте крайнюю левую полосу. Если вы двигаетесь медленнее других, намерены повернуть направо или съехать с дороги, вам нужно придерживаться крайнего правого ряда.&lt;br /&gt;
&lt;br /&gt;
'''Не виляйте!''' Старайтесь двигаться в одном и том же ряду как можно дольше. При межрядных перестроениях будьте внимательны, убедитесь в безопасности своих маневров, в частности, повернув голову направо или налево, визуально проконтролируйте &amp;quot;слепые&amp;quot; зоны по сторонам от вашего автомобиля.&lt;br /&gt;
&lt;br /&gt;
'''Полосы для выполнения поворотов.''' При повороте налево придерживайтесь как можно ближе к центральной разделительной линии, при повороте направо &amp;quot;прижимайтесь&amp;quot; к правому краю проезжей части. Не &amp;quot;срезайте угол&amp;quot; при выполнении левого поворота и не увеличивайте чересчур радиус при повороте направо, чтобы не выехать на полосу встречного движения.&lt;br /&gt;
[[Файл:D3 tips lines5.gif|центр]]&lt;br /&gt;
[[Файл:D3 tips lines6.gif|центр]]&lt;br /&gt;
'''Полосы для обгона.''' Никогда не выезжайте за пределы основной проезжей части дороги, которая обозначена белой линией, нанесенной на дорожное покрытие. Не занимайте без необходимости левую полосу (# 1), предназначенную для обгона.&lt;br /&gt;
[[Файл:D3 tips lines7.gif|центр]]&lt;br /&gt;
При обгоне попутных транспортных средств придерживайтесь левой стороны. Обгон справа разрешен только:&lt;br /&gt;
&lt;br /&gt;
* на многополосных дорогах при условии хорошей видимости и достаточном пространстве для выполнения маневра;&lt;br /&gt;
* если водитель обгоняемого транспортного средства намеревается повернуть налево.&lt;br /&gt;
&lt;br /&gt;
Никогда не обгоняйте слева транспортные средства, сигнализирующие о предстоящем выполнении левого поворота.&lt;br /&gt;
&lt;br /&gt;
Никогда не используйте звуковой сигнал при обгоне справа. Водитель обгоняемого транспортного средства может подумать, что его будут обгонять слева, и перестроится вправо, чем преградит вам дорогу.&lt;br /&gt;
&lt;br /&gt;
'''Центральная полоса для выполнения поворота налево.''' Если проезжая часть оборудована специальной центральной полосой, маркированной с обеих сторон двойной желтой линией – прерывистой и сплошной, при выполнении поворота налево вы должны использовать эту полосу. Разрешенная дальность движения по центральной полосе при выполнении поворота составляет не более 200 футов (примерно 60 м). Использовать центральную полосу для обгона других транспортных средств запрещается.&lt;br /&gt;
[[Файл:D3 tips lines8.gif|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Правила остановки и стоянки ===&lt;br /&gt;
[[Файл:D3 tips p8.jpg|справа]]&lt;br /&gt;
'''Правила остановки и стоянки на дороге с уклоном.''' Совершая остановку при движении под уклон, необходимо повернуть передние колеса автомобиля в сторону бордюра или края дороги, а затем поставить автомобиль на стояночный тормоз. Совершая остановку на подъеме, необходимо повернуть передние колеса автомобиля в сторону от бордюра, дать автомобилю возможность откатиться назад на несколько дюймов, чтобы краем переднего (правого) колеса коснуться бордюра, а затем поставить машину на стояночный тормоз. При отсутствии бордюров необходимо повернуть передние колеса автомобиля в направлении обочины с тем, чтобы исключить возможность самопроизвольного выезда автомобиля на середину дороги из-за неисправности стояночного тормоза.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
D3_tips_parking1.jpg|Уклон с бордюром&lt;br /&gt;
D3_tips_parking2.jpg|Подъем с бордюром&lt;br /&gt;
D3_tips_parking3.jpg|Подъем/уклон без бордюра&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Правила остановки и стоянки у размеченной обочины дорог.''' Обочина дороги может быть размечена цветными линиями (бордюрами), определяющими специальные правила остановки и стоянки в данном месте.&lt;br /&gt;
&lt;br /&gt;
'''Белая разметка''' – разрешена кратковременная остановка для посадки-высадки пассажиров, приема-выгрузки почты.&lt;br /&gt;
&lt;br /&gt;
'''Зеленая разметка''' – разрешена остановка на ограниченное время, которое обычно указывается на информирующем знаке или наносится непосредственно на дорожное покрытие &amp;quot;зеленой зоны&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Желтая разметка''' – остановка разрешена на время, необходимое для выполнения погрузо-разгрузочных операций. Разрешенный лимит времени для выполнения указанных операций устанавливается местным дорожным законодательством.&lt;br /&gt;
&lt;br /&gt;
'''Красная разметка''' – остановка запрещена.&lt;br /&gt;
&lt;br /&gt;
'''Голубая разметка''' – разрешена только стоянка транспортных средств, принадлежащих людям с ограниченными физическими возможностями. Обычно оборудуется специальным дорожным знаком.&lt;br /&gt;
[[Файл:D3 tips parking4.gif|центр]]&lt;br /&gt;
'''Специальные правила стоянки.''' Постановка транспортных средств на стоянку должна производиться на расстоянии не более 18 дюймов (примерно 45 см) от обочины дороги (линий, обозначающих границы стояночной зоны).&lt;br /&gt;
&lt;br /&gt;
Никогда не покидайте транспортное средство, если вы не заглушили двигатель и не установили машину на стояночный тормоз.&lt;br /&gt;
&lt;br /&gt;
'''Запрещается совершать остановку и покидать автомобиль:'''&lt;br /&gt;
&lt;br /&gt;
* на перекрестках, пешеходных переходах и тротуарах;&lt;br /&gt;
* ближе, чем в 15 футах (4,5 м) от пожарных гидрантов или подъездов к пожарным станциям;&lt;br /&gt;
* на проезжей части дороги кроме особых случаев (аварийная остановка, остановка по требованию патруля или установленного дорожного знака);&lt;br /&gt;
* в тоннелях и на мостах кроме особых случаев (см. выше);&lt;br /&gt;
* в любых местах, оборудованных знаком &amp;quot;NO PARKING&amp;quot;.&lt;br /&gt;
[[Файл:D3 tips parking5.jpg|центр]]&lt;br /&gt;
'''В общем случае остановка и стоянка транспортных средств запрещается,''' если таковые действия могут воспрепятствовать дорожному движению.&lt;br /&gt;
&lt;br /&gt;
Автомобиль, оставленный водителем на фривее на время более 4-х часов, подлежит эвакуации независимо от причины остановки.&lt;br /&gt;
&lt;br /&gt;
=== Внешние световые приборы и сигналы ===&lt;br /&gt;
[[Файл:D3 tips p9.jpg|справа]]&lt;br /&gt;
'''Звуковой сигнал применяется:'''&lt;br /&gt;
&lt;br /&gt;
* в случаях, когда это необходимо для предотвращения ДТП;&lt;br /&gt;
* при попытке установить зрительный контакт с другим водителем, находящимся перед вами и намеревающимся выполнить какой-либо маневр;&lt;br /&gt;
* на узких горных дорогах при ограниченной видимости – не более 200 футов (примерно 60 м) по ходу движения.&lt;br /&gt;
&lt;br /&gt;
'''Не нужно применять звуковой сигнал:'''&lt;br /&gt;
&lt;br /&gt;
* чтобы поторопить водителей, двигающихся перед вами со слишком малой скоростью;&lt;br /&gt;
* в случаях, когда можно предотвратить ДТП снизив скорость или сделав остановку – сначала нажми на тормоз, а уж затем сигналь;&lt;br /&gt;
* чтобы указать другим водителям на их ошибки – уязвленный водитель может совершить еще более грубую ошибку и спровоцировать ДТП;&lt;br /&gt;
* просто потому что вы рассержены или хотите подразнить других участников движения.&lt;br /&gt;
&lt;br /&gt;
'''Включайте фары:'''&lt;br /&gt;
&lt;br /&gt;
* в условиях неблагоприятной погоды (облачность, дождь, снег, туман);&lt;br /&gt;
* в условиях ограниченной видимости при любой погоде – если вы не можете увидеть других участников движения на дороге, то и они, вероятно, не могут видеть вас;&lt;br /&gt;
* на узких сельских и горных дорогах – это поможет другим водителям увидеть вас и избежать лобового столкновения;&lt;br /&gt;
* для привлечения внимания других водителей, которые могут не видеть вас. Помигайте фарами, если это необходимо для обеспечения безопасности движения.&lt;br /&gt;
&lt;br /&gt;
Не забывайте выключать свет фар во время стоянки.&lt;br /&gt;
&lt;br /&gt;
'''Используйте аварийную сигнализацию:'''&lt;br /&gt;
&lt;br /&gt;
* в случае аварии вашего автомобиля и невозможности продолжить движение (совершая аварийную остановку, постарайтесь съехать на обочину и остановиться там, где ваш автомобиль будет хорошо виден сзади);&lt;br /&gt;
* чтобы предупредить водителей, следующих за вами, об опасности или ДТП по ходу вашего движения – особенно, если вам придется сделать вынужденную остановку.&lt;br /&gt;
&lt;br /&gt;
'''Сигналы поворота.'''&lt;br /&gt;
&lt;br /&gt;
Используйте для информирования других участников движения о вашем намерении выполнить тот или иной маневр – поворот или разворот, смену полосы движения, обгон, выезд на обочину или возвращение на проезжую часть.&lt;br /&gt;
&lt;br /&gt;
При смене направления движения включайте соответствующий сигнал, по крайней мере, за 100 футов (30 метров) до места выполнения поворота. При смене полосы движения на многополосных дорогах постарайтесь включить сигнал поворота не позднее, чем за 5 секунд до совершения маневра.&lt;br /&gt;
&lt;br /&gt;
'''Сигналы в случае вынужденного торможения или остановки.'''&lt;br /&gt;
&lt;br /&gt;
При виде ДТП по ходу движения предупредите водителей, следующих за вами, о возможности вынужденной остановки – включите аварийную сигнализацию или 3–4 раза кратковременно нажмите на педаль тормоза.&lt;br /&gt;
&lt;br /&gt;
=== Выбор безопасной дистанции ===&lt;br /&gt;
[[Файл:D3 tips p10.gif|справа]]&lt;br /&gt;
Помните, что выбор правильной дистанции от окружающих транспортных средств позволит вам уменьшить риск ДТП. Следите за дистанцией самостоятельно. '''Никогда не надейтесь на то, что другие водители &amp;quot;поделятся&amp;quot; с вами пространством на дороге!'''&lt;br /&gt;
&lt;br /&gt;
Большинство столкновений с впереди идущими транспортными средствами вызваны несоблюдением безопасной дистанции. Чтобы не &amp;quot;въехать&amp;quot; в бампер машины, которая находится перед вами, руководствуйтесь &amp;quot;правилом 3-х секунд&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''В тот момент, когда находящийся перед вами автомобиль проедет мимо какой-либо приметной точки (например, дорожного знака), начинайте отсчет: &amp;quot;одна-тысяча-один, одна-тысяча-два, одна-тысяча-три&amp;quot;. Это займет как раз примерно 3 секунды. Если вы проследуете мимо выбранной отметки до завершения счета, значит дистанция от впереди идущей машины недостаточна и не соответствует требованиям безопасности движения.'''&lt;br /&gt;
&lt;br /&gt;
'''При движении с большой скоростью или в сложных дорожных условиях желательно придерживаться &amp;quot;4-х секундной дистанции&amp;quot;.'''&lt;br /&gt;
&lt;br /&gt;
Управляя тяжелым трехосным грузовиком с трейлером или следуя за таковым, постарайтесь придерживаться дистанции не менее 300 футов (примерно 90 м). Указанное правило не действует только при движении в черте городских кварталов, по многополосным дорогам с возможностью смены полосы движения, при объезде или обгоне.&lt;br /&gt;
&lt;br /&gt;
Сохраняйте достаточную дистанцию не только по ходу движения вашей машины, но и по сторонам. Во избежание столкновений, постарайтесь не находиться в &amp;quot;слепых зонах&amp;quot; других транспортных средств.&lt;br /&gt;
&lt;br /&gt;
=== Движение в транспортном потоке ===&lt;br /&gt;
[[Файл:D3 tips p11.jpg|справа]]&lt;br /&gt;
При въезде на фривей постарайтесь придерживаться скорости, близкой к скорости основного транспортного потока. '''Никогда не делайте остановку перед присоединением к основному транспортному потоку кроме случаев крайней необходимости.''' Основному транспортному потоку принадлежит право преимущественного проезда. Чтобы пользоваться этим правом, старайтесь не &amp;quot;выпадать&amp;quot; из потока.&lt;br /&gt;
&lt;br /&gt;
При перестроениях на фривее, въезде и выезде постарайтесь пользоваться &amp;quot;правилом 4-х секунд&amp;quot;, чтобы сохранить безопасную дистанцию по ходу движения.&lt;br /&gt;
&lt;br /&gt;
Если при перестроении вам нужно пересечь несколько полос, перестраивайтесь постепенно, не дожидайтесь, когда все полосы освободятся одновременно.&lt;br /&gt;
&lt;br /&gt;
'''Тяжелые грузовики'''&lt;br /&gt;
&lt;br /&gt;
Чтобы избежать столкновений с тяжелым грузовиком, каждый водитель должен иметь представление о габаритах, физических возможностях и маневренности грузовика.&lt;br /&gt;
&lt;br /&gt;
Обычно требуется 10–12 секунд, чтобы водитель смог оценить ситуацию и при необходимости остановить свою машину. За это время трехосный грузовик с трейлером, двигающийся со скоростью 55 миль в час (около 90 км/час), в зависимости от дорожных условий сможет пройти расстояние почти в 800 футов (более 240 м).&lt;br /&gt;
&lt;br /&gt;
При поворотах задние колеса автомобиля проходят более короткий путь, чем передние. Чем длиннее автомобиль, тем больше эта разница. Поэтому на поворотах грузовик может пересечь соседнюю полосу движения.&lt;br /&gt;
&lt;br /&gt;
У водителя грузовика существуют обширные &amp;quot;слепые зоны&amp;quot;, находиться в которых опасно для других участников движения. В общем случае, если вы не видите лицо водителя грузовика в боковом зеркале его машины, значит, и он не может видеть вас.&lt;br /&gt;
[[Файл:D3 tips stream.gif|центр]]&lt;br /&gt;
&lt;br /&gt;
Наиболее распространенные ошибки водителей при движении по соседству с грузовиком:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;подрезка&amp;quot; при межрядных перестроениях и выезде с дороги – эти маневры нужно выполнять находясь позади грузовика, а не перед его &amp;quot;носом&amp;quot;;&lt;br /&gt;
* задержки при обгоне – не нужно медлить при обгоне грузовика, находясь в &amp;quot;слепой зоне&amp;quot;. Постарайтесь как можно скорее оказаться перед грузовиком, чтобы его водитель мог видеть вас;&lt;br /&gt;
* слишком малая дистанция от заднего борта грузовика (трейлера) – водитель грузовика не может видеть вас, а у вас не будет возможности совершить маневр, если грузовик резко затормозит;&lt;br /&gt;
* недооценка габаритов и скорости движения автопоезда – из-за больших габаритов скорость движения грузовика с трейлером кажется меньшей, чем она есть на самом деле. Подобные ошибки в оценке габаритов и скорости часто приводят к ДТП при проезде через перекрестки.&lt;br /&gt;
&lt;br /&gt;
=== Совершение обгона ===&lt;br /&gt;
[[Файл:D3 tips p12.gif|справа]]&lt;br /&gt;
Постарайтесь не обгонять другие транспортные средства при движении по двухрядным дорогам. В этом случае обгон сопряжен с выездом на встречную полосу движения, '''что может быть очень опасно.'''&lt;br /&gt;
&lt;br /&gt;
Перед совершением обгона вам нужно оценить безопасное пространство с учетом:&lt;br /&gt;
&lt;br /&gt;
встречного транспортного потока (безопасное пространство – 1600 футов / около 500 м при скорости 55 миль/час);&lt;br /&gt;
ограниченной видимости на поворотах и подъемах (безопасное пространство – примерно 1/3 мили или 530 м);&lt;br /&gt;
приближения к пересечению дорог на пути следования;&lt;br /&gt;
текущих дорожных условий.&lt;br /&gt;
&lt;br /&gt;
Обязательно используйте соответствующие сигналы перед совершением обгона, чтобы проинформировать водителей, двигающихся перед вами.&lt;br /&gt;
&lt;br /&gt;
При возвращении на основную полосу движения после обгона не забывайте о необходимости поддержания безопасной дистанции. Не рассчитывайте на то, что у вас будет достаточно пространства и времени для обгона нескольких транспортных средств. Не надейтесь, что другие водители освободят вам дорогу.&lt;br /&gt;
&lt;br /&gt;
=== Движение и заторы ===&lt;br /&gt;
[[Файл:D3 tips p13.gif|справа]]&lt;br /&gt;
'''Предупреждение заторов на дороге.''' &lt;br /&gt;
Хронические &amp;quot;пробки&amp;quot; и заторы представляют собой одну из самых серьезных проблем при движении по дорогам Калифорнии.&lt;br /&gt;
&lt;br /&gt;
Основные причины возникновения заторов:&lt;br /&gt;
&lt;br /&gt;
* излишнее любопытство – водители слишком часто сбрасывают скорость, чтобы получше разглядеть сценки ДТП или какие-то другие необычные вещи, которые можно увидеть в пути;&lt;br /&gt;
* несоблюдение безопасной дистанции – служит причиной ДТП и лишает водителей возможности объехать препятствия, неожиданно возникающие на дороге;&lt;br /&gt;
* неоправданно частая смена полос при движении по многорядным дорогам – &amp;quot;виляние&amp;quot; в поисках свободных участков дороги обычно приводит к замедлению общей скорости транспортного потока;&lt;br /&gt;
* невнимательность – водители во время движения слишком часто отвлекаются на посторонние дела.&lt;br /&gt;
&lt;br /&gt;
Поломки и вынужденные остановки транспортных средств (из-за ненадлежащего ухода и неправильной оценки расхода топлива) часто служат причиной возникновения &amp;quot;пробок&amp;quot; на дорогах.&lt;br /&gt;
&lt;br /&gt;
'''Конфликтные ситуации.''' Конфликты на дорогах могут возникнуть, когда кто-либо из водителей агрессивно реагирует на действия других водителей.&lt;br /&gt;
&lt;br /&gt;
Чтобы не спровоцировать конфликты, последуйте этим советам:&lt;br /&gt;
&lt;br /&gt;
* избегайте &amp;quot;подрезок&amp;quot; – присоединяясь к движению в том или ином ряду, сохраняйте безопасную дистанцию и предупреждайте других водителей сигналами;&lt;br /&gt;
* двигаясь с малой скоростью, не занимайте левую (скоростную) полосу дороги – это всегда раздражает других водителей;&lt;br /&gt;
* сохраняйте безопасную дистанцию по ходу движения – многие водители злятся, когда кто-нибудь висит у них на &amp;quot;хвосте&amp;quot;;&lt;br /&gt;
* не жестикулируйте в адрес других водителей – держите руки на &amp;quot;баранке&amp;quot; и помните, что любой обидный жест может спровоцировать другого водителя на ответную агрессию;&lt;br /&gt;
* используйте звуковой сигнал только в крайнем случае – даже если вы посигналите из вежливости, это может быть неправильно понято другим водителем;&lt;br /&gt;
* избегайте зрительного контакта с раздраженным водителем – некоторые люди могут воспринять зрительный контакт как вызов с вашей стороны;&lt;br /&gt;
* держитесь подальше от агрессивного водителя – если во время движения вы совершите какую-нибудь (даже непреднамеренную) ошибку, для агрессивного человека это может послужить поводом, чтобы затеять драку.&lt;br /&gt;
&lt;br /&gt;
=== Как избежать ДТП ===&lt;br /&gt;
[[Файл:D3 tips p14.gif|справа]]&lt;br /&gt;
Ведите себя так, чтобы другие участники движения могли понять, что вы собираетесь делать. Постарайтесь следовать приведенным ниже рекомендациям.&lt;br /&gt;
&lt;br /&gt;
'''Не задерживайтесь в &amp;quot;слепых зонах&amp;quot;''' транспортных средств, движущихся с вами в одном направлении.&lt;br /&gt;
&lt;br /&gt;
'''Выбирайте правильную скорость движения''' с учетом текущих условий и установленных ограничений.&lt;br /&gt;
&lt;br /&gt;
Учитывая формальные ограничения, '''не забывайте о здравом смысле''' – следите не только за знаками, но и состоянием дороги.&lt;br /&gt;
&lt;br /&gt;
'''Аккуратно и внимательно совершайте повороты''' – вам следует уменьшить скорость и притормозить перед поворотом, а не во время поворота.&lt;br /&gt;
&lt;br /&gt;
'''Будьте осторожны при движении по мокрой и скользкой дороге''' – на мокрой дороге &amp;quot;потеря контакта&amp;quot; между колесом автомобиля и дорожным покрытием возможна уже при скорости около 50 миль/час (80 км/час).&lt;br /&gt;
&lt;br /&gt;
В сложных дорожных условиях рекомендуется уменьшить скорость по сравнению с обычной:&lt;br /&gt;
&lt;br /&gt;
* на мокрой дороге – на 5–10 миль/час (8–15 км/час);&lt;br /&gt;
* на заснеженной дороге – примерно вдвое;&lt;br /&gt;
* при гололеде – перейти на &amp;quot;малый ход&amp;quot;.&lt;br /&gt;
При '''движении в транспортном потоке''' старайтесь придерживаться общей для всех скорости. ДТП чаще всего происходят, когда кто-либо из водителей движется быстрее или медленнее других участников движения.&lt;br /&gt;
&lt;br /&gt;
Чтобы сохранить возможность безопасной остановки, рекомендуется уменьшать скорость движения на следующих участках дорог:&lt;br /&gt;
&lt;br /&gt;
* поблизости от торговых центров и автостоянок, в деловых центрах городов;&lt;br /&gt;
* в зонах с высокой плотностью транспортного потока;&lt;br /&gt;
* при виде включенных стоп-сигналов у нескольких автомобилей, движущихся впереди вас;&lt;br /&gt;
* при проезде по узким мостам и через тоннели;&lt;br /&gt;
* поблизости от школ и детских игровых площадок, в жилых кварталах городов.&lt;br /&gt;
&lt;br /&gt;
=== Вождение и алкоголь (наркотики) ===&lt;br /&gt;
[[Файл:D3 tips p15.gif|справа]]&lt;br /&gt;
Управление автомобилем в состоянии алкогольного или наркотического опьянения является опасным правонарушением. Под действием алкоголя или наркотиков человек, прежде всего, утрачивает то, что называется здравым смыслом. Находясь &amp;quot;под хмельком&amp;quot;, водитель обычно не может правильно оценивать изменения дорожной ситуации и адекватным образом на них реагировать, чем подвергает большой опасности самого себя и других участников движения.&lt;br /&gt;
&lt;br /&gt;
Лучшее, что можно сделать – это не садиться за руль даже после &amp;quot;глотка&amp;quot; спиртного. В среднестатистическом случае человеческому организму требуется примерно по 1-му часу для восстановления после каждой стандартной (0,33 мл) бутылки пива, бокала вина (140 мл) или рюмки (40 мл) более крепкого напитка.&lt;br /&gt;
Для водителей '''в возрасте 21 года и старше''' установлены следующие предельно допустимые концентрации (ПДК) алкоголя в крови:&lt;br /&gt;
&lt;br /&gt;
* не более 0,08% – при управлении обычными транспортными средствами;&lt;br /&gt;
* не более 0,04% – при управлении коммерческими транспортными средствами.&lt;br /&gt;
&lt;br /&gt;
Для водителей '''младше 21 года''' ПДК алкоголя в крови – не более 0,01%.&lt;br /&gt;
&lt;br /&gt;
Однако не следует забывать: даже если содержание алкоголя в крови у водителя будет ниже установленного уровня ПДК – это еще не гарантия, что он сможет безопасно управлять своим автомобилем.&lt;br /&gt;
&lt;br /&gt;
За управление транспортным средством в нетрезвом состоянии (превышение ПДК алкоголя в крови) к провинившемуся водителю, которому исполнился 21 год и в случае первого нарушения, по решению суда могут быть применены следующие санкции:&lt;br /&gt;
&lt;br /&gt;
* тюремное заключение сроком от 48 часов до 6 месяцев;&lt;br /&gt;
* денежный штраф в размере от 390 до 1000 долларов;&lt;br /&gt;
* лишение водительских прав сроком на 6 месяцев;&lt;br /&gt;
* изъятие транспортного средства, если оно зарегистрировано на имя нарушителя, сроком на 6 месяцев с оплатой хранения на штрафной стоянке за счет нарушителя.&lt;br /&gt;
&lt;br /&gt;
При неоднократном нарушении &amp;quot;правил трезвого вождения&amp;quot; в течение 7 лет к водителю могут быть применены существенно более строгие санкции.&lt;br /&gt;
&lt;br /&gt;
Статистика показывает, что 38% дорожно-транспортных происшествий, имеющих трагические последствия, происходит по вине нетрезвых водителей. За участие в ДТП, повлекшем тяжкие последствия для здоровья и жизни людей, нарушитель &amp;quot;правил трезвого вождения&amp;quot; может быть подвергнут не только административному, но и уголовному наказанию.&lt;br /&gt;
&lt;br /&gt;
Все, что сказано выше по поводу употребления алкоголя за рулем в полной мере относится и к наркотическим веществам. Антиалкогольные правила дорожного законодательства являются одновременно и антинаркотическими.&lt;br /&gt;
&lt;br /&gt;
'''Перевозка алкогольных напитков и наркотических веществ.''' &lt;br /&gt;
Закон очень строг в отношении перевозки алкогольных напитков и наркотических веществ в автомобилях. Емкости с алкогольными напитками (пивом, вином, крепкими напитками), находящиеся в салоне автомобиля, должны быть полными и нераспечатанными. В противном случае их следует поместить в багажник или другое место, недоступное для пассажиров. Помните, что запрет на употребление алкогольных напитков в автомобиле распространяется не только на водителя, но и на пассажиров. Хранение распечатанной емкости с алкоголем в &amp;quot;бардачке&amp;quot; является противозаконным.&lt;br /&gt;
&lt;br /&gt;
=== Здоровье и безопасность движения ===&lt;br /&gt;
[[Файл:D3 tips p16.gif|справа]]&lt;br /&gt;
&lt;br /&gt;
'''Зрение'''&lt;br /&gt;
&lt;br /&gt;
Для безопасного вождения необходимо хорошее зрение. Большинство действий водителя, находящегося за рулем автомобиля, основывается на том, что он видит. Если у вас нарушен глазомер, вы не сможете правильно оценить дистанцию от других транспортных средств или помех, возникающих на дороге, а следовательно не сможете выбрать и осуществить правильные действия.&lt;br /&gt;
&lt;br /&gt;
'''Слух'''&lt;br /&gt;
&lt;br /&gt;
Многие люди ошибочно полагают, что слух не столь уж важен для безопасного вождения. В действительности это не так. Зачастую только благодаря хорошему слуху вы сможете уловить признаки надвигающейся опасности – звук клаксона, вой сирены, скрип тормозов и т.п. Чтобы водитель мог хорошо различать &amp;quot;звуки дороги&amp;quot;, в салоне автомобиля не рекомендуется включать на полную громкость радио или музыкальный проигрыватель, а тем более пользоваться наушниками, закрывающими оба уха. Последнее является нарушением закона.&lt;br /&gt;
&lt;br /&gt;
'''Внимательность'''&lt;br /&gt;
&lt;br /&gt;
Усталость – плохой попутчик. Уставший водитель теряет чувство бдительности, что зачастую не позволяет ему вовремя заметить опасность или среагировать на нее. Соответственно, возрастает риск стать участником дорожно-транспортного происшествия. Если вы ощущаете усталость или сонливость, то вам следует свернуть с дороги, остановиться и немного отдохнуть.&lt;br /&gt;
&lt;br /&gt;
'''Последствия применения медикаментов'''&lt;br /&gt;
&lt;br /&gt;
Важно помнить, что применение любых медикаментов является потенциально опасным, если вы находитесь за рулем автомобиля. Даже самые безобидные лекарства от простуды и аллергии, продающиеся без рецепта врача, могут вызвать сонливость и притупить бдительность, что негативно отразится на вашей способности управлять автомобилем.&lt;br /&gt;
&lt;br /&gt;
'''Самочувствие и эмоции.'''&lt;br /&gt;
&lt;br /&gt;
Ваше эмоциональное состояние (спокойствие или нервозность), ваш характер и темперамент во многом определяют стиль вождения. Не позволяйте эмоциям управлять собой и вступать в противоречие с требованиями безопасного вождения. Садясь за руль автомобиля, всегда – насколько возможно – сохраняйте рассудительность, благоразумие, хорошее настроение и не забывайте о правилах безопасного вождения.&lt;br /&gt;
&lt;br /&gt;
=== Некоторые важные &amp;quot;мелочи&amp;quot; ===&lt;br /&gt;
[[Файл:D3 tips p17.gif|справа]]&lt;br /&gt;
'''Не садитесь за руль, если вы нездоровы или выведены из душевного равновесия.'''&amp;lt;/br&amp;gt;&lt;br /&gt;
'''Отрицательные эмоции – злость, грусть, обида и проч. – опасны для водителя.'''&amp;lt;/br&amp;gt;&lt;br /&gt;
'''Безрассудное вождение – не лучший способ дать выход своим эмоциям.'''&amp;lt;/br&amp;gt;&lt;br /&gt;
'''Не садитесь за руль после употребления алкоголя или наркотических веществ.'''&amp;lt;/br&amp;gt;&lt;br /&gt;
'''Не устраивайте гонки с &amp;quot;лихачами&amp;quot; или подвыпившими водителями.'''&amp;lt;/br&amp;gt;&lt;br /&gt;
'''Управление автомобилем в неадекватном физическом состоянии запрещено законом.'''&amp;lt;/br&amp;gt;&lt;br /&gt;
'''Водитель может быть признан нетрезвым (неспособным управлять автомобилем) даже после одной выпитой им бутылки пива.'''&lt;br /&gt;
&lt;br /&gt;
{{Дб3}}&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
[https://vk.com/pages?oid=-6026467&amp;amp;p=FAQ Источник]&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=%D0%98%D0%B3%D1%80%D0%BE%D0%B2%D0%BE%D0%B9_%D1%80%D0%B5%D0%B3%D0%B8%D0%BE%D0%BD_(%D0%94%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B1%D0%BE%D0%B9%D1%89%D0%B8%D0%BA%D0%B8_2)&amp;diff=5525</id>
		<title>Игровой регион (Дальнобойщики 2)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=%D0%98%D0%B3%D1%80%D0%BE%D0%B2%D0%BE%D0%B9_%D1%80%D0%B5%D0%B3%D0%B8%D0%BE%D0%BD_(%D0%94%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B1%D0%BE%D0%B9%D1%89%D0%B8%D0%BA%D0%B8_2)&amp;diff=5525"/>
		<updated>2025-12-05T12:15:14Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: Добавил обновлённую топографическую карту от Αίυαη Κεηοβί&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики 2]]&lt;br /&gt;
[[Файл:D2_topo_map.jpg|500px|thumb|right|Топографическая карта региона]]&lt;br /&gt;
'''Игровой регион''' в [[Дальнобойщики 2|Дальнобойщиках 2]] — вымышленная местность, прототипом которой частично являются Новосибирская область и Горный Алтай. Регион в первую очередь представлен одиннадцатью населёнными пунктами и соединяющими их дорогами (кроме участка [[Горный]] — [[Алмазный]]), а также спортивной трассой [[Кольцо|«Кольцо»]].&lt;br /&gt;
&lt;br /&gt;
== География региона ==&lt;br /&gt;
Пейзажи игровой карты весьма разнообразны, несмотря на небольшие размеры по сравнению с другими подобными играми. Помимо лесов, занимающих значительную часть региона, на севере карты можно увидеть море ([[Бухта|порт прилагается]]), южнее — болота, с помощью которых удастся неплохо [[Секретные дороги|сократить путь]] при доставке грузов. На юго-востоке, по пути в Алмазный игрок обязательно встретит заснеженные горы, а окрестности самого Алмазного ни что иное как полупустыня. Кроме того, по некоторым местам проходят реки.&lt;br /&gt;
&lt;br /&gt;
== Населённые пункты ==&lt;br /&gt;
Большинство населённых пунктов в игре выглядят довольно условно — в некоторых кроме [[База|базы]], стоянки и [[База#Диспетчерская|диспетчерской]] больше ничего может не быть. Другие же имеют хотя бы одну полноценную улицу с домами.&lt;br /&gt;
&lt;br /&gt;
Всего в игре 11 населённых пунктов:&lt;br /&gt;
* '''[[Южный]]''' — город с аэропортом, центр округа Южный. Стартовая точка в игре. Окружающий ландшафт — лесостепь.&lt;br /&gt;
* '''[[Залесск]]''' — крупный по игровым меркам населенный пункт с расположенной неподалёку гоночной трассой «[[Кольцо|Кольцо]]». Окружающая природа — лиственные леса.&lt;br /&gt;
* '''[[Ельнино]]''' — населённый пункт, окружённый хвойными лесами.&lt;br /&gt;
* '''[[Ключи]]''' — населённый пункт сельского типа, проезд к которому осуществляется по грунтовой дороге.&lt;br /&gt;
* '''[[Бухта]]''' — город-порт, находящийся на севере игрового региона, центр округа Бухта.&lt;br /&gt;
* '''[[Приозёрск]]''' — крупный населённый пункт и транспортный узел, центр округа Приозёрск.&lt;br /&gt;
* '''[[Шахты]]''' — посёлок, расположенный недалеко от заброшенных шахт, в которых добывались ископаемые для [[Алмазный|алмазного комбината]].&lt;br /&gt;
* '''[[Боровое]]''' — посёлок, центр округа Боровое. Широкие дороги, окружающий ландшафт — хвойные леса.&lt;br /&gt;
* '''[[Нижнегорск]]''' — посёлок на берегу реки, в низовьях гор. Окружён густыми лесами.&lt;br /&gt;
* '''[[Горный]]''' — крупный населённый пункт, находящийся на самой высокой географической позиции в горах, на перевале. Центр округа Горный.&lt;br /&gt;
* '''[[Алмазный]]''' — промышленный город, причём закрытый. Окружающая местность — полупустыня, множество холмов и водоёмов.&lt;br /&gt;
&lt;br /&gt;
Итак, самыми крупными населёнными пунктами являются Приозёрск и Горный. Приозёрск находится в центре региона и является транспортным узлом и, вероятно, региональным центром. Горный - это по сути перевалочная база на пути в промышленный Алмазный, обеспечивает жильём рабочих-вахтовиков. &lt;br /&gt;
&lt;br /&gt;
Южный, Бухта и Алмазный - 3 важнейших города в регионе, пусть и с не большим собственным населением, но имеющие весомое экономическое значение. В Южном находится аэропорт для воздушного сообщения с внешним миром, в Бухте - порт для связи по морю, а также крупные автотранспортные развязки, а в Алмазном - крупнейший в регионе промышленный комбинат, настолько важный, что сам город из-за этого закрытый - туда пускают только по работе. &lt;br /&gt;
&lt;br /&gt;
Залесск и Ельнино в западной части региона хоть и по населению довольно крупные, но не настолько важные в деловом плане: в них течёт спокойная размеренная жизнь, местные жители промышляют продажей б/у автомобилей, из Залесска ездят в аэропорт Южного или на гоночное Кольцо на соревнования, а из Ельнино - в морской порт Бухты по отдельному скоростному шоссе.&lt;br /&gt;
&lt;br /&gt;
Ключи - сельскохозяйственный посёлок и минеральный источник, находится в ущелье, через которое проходит просёлочная дорога.&lt;br /&gt;
&lt;br /&gt;
Остальные населённые пункты совсем небольшие и мало чем выделяющиеся. Нижнегорск - маленький посёлок на берегу реки среди окружающих лесов. Шахты - совсем небольшой посёлок в предгорье, возле заброшенных промышленных шахт. Боровое - небольшой транзитный посёлок между севером и югом региона, имеет отдельный проезд на парковку через хвойный лес.&lt;br /&gt;
&lt;br /&gt;
== Дороги ==&lt;br /&gt;
[[Файл:Нижнегорск-Горный.jpg|мини|Вид на трассу Нижнегорск — Горный]]&lt;br /&gt;
Дороги в игре можно условно разделить на несколько типов:&lt;br /&gt;
* '''Шоссе''' — занимает большую часть карты, преимущественно четырёхполосная асфальтированная трасса.&lt;br /&gt;
* '''Автомагистрали''' — высокоскоростные широкие участки дороги, полосы которых, как правило, разделены дорожными ограждениями. Ими же трассы отделяются от окружающей местности.&lt;br /&gt;
* '''Грунтовые дороги''' — таких участков трассы в игре три: подъезд к Ключам с обеих сторон, небольшой участок грунтовки на Кольце, и небольшой объездной путь на трассе Ельнино-Приозёрск рядом с нефтебазой.&lt;br /&gt;
* '''Бездорожье''' — все срезы, что есть в игре, а также существенная часть пути из Горного в Алмазный.&lt;br /&gt;
&lt;br /&gt;
=== Дорожные работы ===&lt;br /&gt;
[[Файл:Tpmap_roadwork.jpg|300px|thumb|right|Карта дорожных работ [https://rnr-wiki.ru/images/9/97/Tpmap_roadwork.jpg (полный размер)] &amp;lt;ref&amp;gt;[http://truckpol.5v.pl/hard_truck_king_of_the_road.html Источник основы карты]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
Как и в реальной жизни, дороги в игре иногда закрываются на ремонт. Правда, здесь такие ситуации случаются гораздо чаще, чем в отдельно взятой области реального мира. Некоторые участки дорог затапливаются, их заваливает камнями, а может и вовсе обвалиться мост. Все такие места изначально предопределены - это может быть, например, участок трассы Ельнино — Приозёрск, шахты, ведущие в Алмазный, или одна из сторон моста возле Бухты. Всего в игре 16 мест, где могут случиться дорожные работы; большая их часть связана с шахтами, которые иногда обваливаются в одном из восьми участков.&lt;br /&gt;
&lt;br /&gt;
Все перекрытые из-за дорожных работ участки дорог можно объехать. Тот же закрытый мост возле Бухты можно преодолеть по соседней полосе; затопленные дороги тоже объезжаются неподалёку. Этим бывает очень выгодно пользоваться, так как за доставку грузов через закрытые на ремонт дороги выплачивается намного более высокая награда, а соперники об объездах не знают. К тому же, если при подъезде к перекрытому участку сохранить игру, а затем загрузить её, ремонтные работы пропадут.&lt;br /&gt;
&lt;br /&gt;
== Объекты игрового мира ==&lt;br /&gt;
Чтобы разнообразить, на первый взгляд, крайне простой геймплей игры, разработчики ввели в неё много дополнительных элементов, одними из которых также являются '''объекты игрового мира'''. Их можно встретить в самых разных уголках карты.&lt;br /&gt;
&lt;br /&gt;
=== Находятся только в пределах населённых пунктов ===&lt;br /&gt;
* '''[[База|Базы]]''' — главный элемент каждого населённого пункта — места, где происходит погрузка\разгрузка товаров. В них иногда встречаются нелегальные грузы (после достижения определённого процента грузоперевозок в регионе).&lt;br /&gt;
&lt;br /&gt;
=== Находятся за пределами населённых пунктов ===&lt;br /&gt;
[[Файл:Наливная.png|250px|thumb|справа|Нефтебаза ]]&lt;br /&gt;
* '''[[База#Нефтебаза|Нефтебазы]]''' — рядом с каждой есть [[Полуприцепы|прицепы-цистерны]], с помощью которых можно перевозить топливо. Перевозка горючего приносит несколько более высокий доход по сравнению с обычными грузами, но при этом вам не даются лицензии на найм. Соперники отсутствуют.&lt;br /&gt;
* '''Заправочные цистерны''' — как правило, находятся на [[Секретные дороги|скрытых дорогах]]. Позволяют заправить автомобиль, если поблизости нет АЗС, или в случае выхода из строя ближайшей официальной АЗС вследствие подрыва игроком или NPC.&lt;br /&gt;
[[Файл:Вормашина.png|250px|thumb|справа|Ворованный [[Навистар Игл|International Eagle]]]]&lt;br /&gt;
* '''Ворованные автомобили''' — спрятаны недалеко от трассы за деревьями или холмами. Встречаются только в западной части карты на участках Залесск-Ельнино-Бухта и Южный-Приозёрск-Ельнино, всего 5 мест продажи таких автомобилей. Отсутствуют в восточной части карты на участках Шахты-Нижнегорск, Ключи-Алмазный и трассе Бухта-Приозёрск. У каждого ворованного автомобиля тоже есть свой продавец, с которым можно связаться по рации.&lt;br /&gt;
&lt;br /&gt;
=== Встречаются везде ===&lt;br /&gt;
* '''[[АЗС]]''' — позволяют заправить своё транспортное средство. В Залесске и Приозёрске расположены внутри города. В Ельнино и Горном присутствуют непосредственно возле городской черты на подъезде с южной стороны. Все остальные АЗС расположены на трассах.&lt;br /&gt;
* '''[[СТО]]''' — предназначены для ремонта и апгрейда транспорта. В Бухте и Алмазном присутствуют внутри города, а также в непосредственной близости от городской черты есть на южном подъезде к Нижнегорску и с западной стороны от Шахт и Южного. Все остальные СТО расположены на трассах.&lt;br /&gt;
* '''[[Секретные грузы]]''' — контейнеры с грузами, спрятанные обычно в стороне от дороги - на бездорожье или скрытых путях. Внутри населённых пунктов бывают только в Приозёрске и Алмазном.&lt;br /&gt;
* '''[[База#Диспетчерская|Диспетчерские]]''' — справочные киоски, предоставляющие информацию о грузах, местах доставки и оставшемся времени присутствия грузов на базе. В населённых пунктах, как правило 2 диспетчерских — на въезде и на выезде.&lt;br /&gt;
* '''Стоянки''' — на них можно взять на работу наёмника, купить новый автомобиль, уже стоящий на стоянке, либо связавшись с помощью [[Рация|рации]] с продавцом, заказать любой понравившийся автомобиль, имеющийся у него в продаже, который он за отдельную плату доставит в соседний населённый пункт. У каждой продаваемой машины есть свой продавец, у которого свой выбор доступных к заказу машин. Также каждого продавца можно попросить о помощи с ремонтом автомобиля. Но если на стоянке нет автомобилей на продажу (или есть только водители, ищущие работу), то вызвать продавца не получится.&lt;br /&gt;
* '''Радары''' - или, если точнее, камеры фотовидеофиксации. Моментально штрафуют за превышение скорости от 5 км/ч и выше с соответствующим визуальным уведомлением. При получении штрафа если не снижаете скорость - может тут же прилететь повторный и даже третий штраф от того же самого радара. Радар может сработать, даже если вы его уже немного проехали (на совсем небольшое расстояние). Радары-камеры присутствуют только в области Южный-Залесск-Ельнино-Приозёрск, а также в Горном и на подвесном мосту Бухты. Отсутствуют на трассах Бухта-Приозёрск (до въезда в Приозёрск, там в версиях 8.х обычно бывает мусорно, т.е. есть патрули с радарами), Бухта-Ельнино (до въезда в Ельнино), Залесск-Шахты-Боровое-Нижнегорск-Горный(кроме городской черты Горного)-Алмазный, и от Бухтинского моста до Нижнегорска. В городской черте Залесска хоть радар и отсутствует, но есть ограничение скорости, так что в версиях игры 8.х превышение может быть зафиксировано милицейским патрулём. &lt;br /&gt;
* '''Стоячие патрули''' - милицейские машины, припаркованные на обочине, которые следят за тем, чтобы только вы не нарушали правопорядок. В версиях игры 8.х могут фиксировать, помимо остальных нарушений, ещё и превышение скорости. Радары патрульных машин действуют на намного большем расстоянии, чем стационарные радары на столбах.&lt;br /&gt;
* '''[[Полуприцепы]]''' — необходимы для перевозки грузов на седельных тягачах. Бывают 3 видов: фургоны (для перевозки грузов на любом тягаче кроме Шторма), цистерны (для перевозки топлива на любом тягаче кроме Шторма), а также специализированные фургоны для тягача Шторм (не подходящие больше ни к каким другим машинам). Возле складов обычно стоят пустые полуприцепы-фургоны обоих видов (для Шторма и для остальных тягачей), а возле нефтебаз - полуприцепы-цистерны (для всех тягачей кроме Шторма, т.к. для Шторма перевозка топлива не предусмотрена). А на трассах могут встречаться уже загруженные полуприцепы всех трёх видов, товар в которых предназначен для разовой доставки без конкурентов в какой-либо пункт назначения. На карте полуприцепы с грузом обозначены жёлтыми вагончиками, их обычно 10шт во всём регионе.&lt;br /&gt;
* '''Подержанные автомобили''' — можно встретить на обочине возле дороги в населённых пунктах или рядом с СТО, всего 5 мест продажи таких автомобилей. Встречаются только в западной части региона на участках Южный-Ельнино и Южный-Приозёрск. Отсутствуют в восточной части карты на участках Шахты-Нижнегорск, Ключи-Алмазный и трассе Бухта-Приозёрск (до въезда в сам Приозёрск). У каждого подержанного автомобиля, как и у ворованного, есть свой продавец, выполняющий те же функции.&lt;br /&gt;
* '''Церкви''' - христианские заведения с латинским крестом, т.е. католические или протестантские (видимо, из-за ориентированности игры на западную аудиторию), присутствуют по сути в качестве бутафории, не влияя на игровой процесс. Одна церковь находится в южной части Ельнино, другая - на северном подъезде к Залесску, и один, судя по удалённому расположению, монастырь - на подъезде к Горному с севера, на холме.&lt;br /&gt;
&lt;br /&gt;
== Игровой регион в версиях 4.0-5.5 ==&lt;br /&gt;
В первых версиях игры, предназначенных для запада, игровой мир хоть и повторяет своими очертаниями вариант из российского релиза (вышедшего, к слову, только через год после западного), но всё-таки очень сильно отличается во многих местах:&lt;br /&gt;
* Первое и самое значительное отличие в карте — выезд с Южного с обеих сторон. В 4.0-5.5 эти участки имеют совсем другой маршрут; отсутствуют дамба, мост, река, СТО. «Перемычка», соединяющая их, выглядит как простая дорога в лесу; отсутствует лесное хозяйство вдоль объездной дороги Южного, которое в финальных версиях игры ограждено забором и имеет два закрытых въезда (в которые проехать не возможно);&lt;br /&gt;
* АЗС на повороте к Южному расположена прям на перекрёстке, по другую сторону дороги чем в финальной версии;&lt;br /&gt;
* Отсутствует стоянка (соответственно и подъезд к ней) возле Борового; в Ключах наоборот, присутствует официальная стоянка на два машиноместа - по одному с противоположных сторон от базы;&lt;br /&gt;
* Въезд на трассу Ельнино — Приозёрск расположен несколько дальше от населённого пункта - напротив АЗС-30 (по нумерации более новых версий);&lt;br /&gt;
* Стоянка на трассе Ельнино-Приозёрск сильнее удалена от Приозёрска, и находится ближе к середине трассы; стоянка в самом Приозёрске расположена напротив базы (т.е. на внешней кольцевой дороге), а не на внутреннем малом кольце в спальном районе, а также есть ещё одна стоянка на выезде в сторону Бухты;&lt;br /&gt;
* В западной части мира используется намного менее яркая текстура травы, что делает игру несколько мрачной. Исключение - трасса Ельнино — Приозёрск, где наоборот, трава чрезмерно зелёная;&lt;br /&gt;
* В целом, очень много текстур выглядят иначе и имеют меньшее в 2 раза разрешение;&lt;br /&gt;
* На трассе Шахты — Боровое СТО и заправка отнесены на некоторое расстояние от дороги и имеют отдельный подъезд к себе;&lt;br /&gt;
* Ландшафт и дорога в значительной части мира менее полигональны;&lt;br /&gt;
* Помимо привычных, встречаются большие СТО в виде ангаров со сквозным проездом;&lt;br /&gt;
* Отсутствуют нефтебазы, следовательно, АЗС не имеют нумерации;&lt;br /&gt;
* Отсутствуют какие-либо скоростные ограничения и радары (соответственно, нет улучшения «Антирадар»);&lt;br /&gt;
* Отсутствуют светофоры;&lt;br /&gt;
* Населённые пункты обставлены значительно беднее. Также, на трассах гораздо меньше декоративных объектов и знаков, отсутствуют статичные люди и животные.&lt;br /&gt;
* Во многих местах отсутствуют ограждения (заборы) вдоль трассы, особенно на трассе Ельнино-Залесск и Ельнино-Приозёрск (но и на других дорогах тоже). Вокруг дороги намного меньше одиночных деревьев, так что ощущение простора вокруг дороги больше.&lt;br /&gt;
&lt;br /&gt;
== Интересные факты ==&lt;br /&gt;
* Размеры игрового мира составляют примерно 9550x11030 м&amp;lt;ref&amp;gt;Данные получены исходя из файлов aa.b3d, ap.b3d и bb.b3d. Цифры приблизительные, так как настоящий размер пустыни в Алмазном [[Участник:Aleko_2144|мне]] неизвестен.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* При самом быстром масштабе времени одни игровые сутки проходят за 72 секунды, и в таком случае 1 секунда реального времени равна 20 игровым минутам. При самом длинном масштабе одни игровые сутки проходят примерно за 1872 секунды (31 минута 12 секунд), и тогда за 1 секунду реального времени пройдут около 46 игровых секунд&amp;lt;ref&amp;gt;Данные актуальны для версии 8.2.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Галерея ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:Map.gif|Оригинал топографической карты от SoftLab-NSK&lt;br /&gt;
Файл:New_topo_map_DB2.jpg|Обновленная топографическая карта с учётом реальных игровых дорог за авторством Αίυαη Κεηοβί&lt;br /&gt;
Файл:Карта дб2.png|Карта с прозрачным фоном&lt;br /&gt;
Файл:SuperCargoMap.jpg|Карта с отмеченными скрытыми грузами и дорогами&lt;br /&gt;
Файл:Maps color comment.png|Карта версии 7.4 в 3Ds Max&lt;br /&gt;
Файл:RepairMap.jpg|Карта расположения СТО&lt;br /&gt;
Файл:FuelMap.jpg|Карта расположения АЗС и топливных цистерн&lt;br /&gt;
Файл:EnvMap.jpeg|Карта с обозначением регионов в игровых файлах&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Игровой_регион_(Дб2)}}&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:New_topo_map_DB2.jpg&amp;diff=5524</id>
		<title>Файл:New topo map DB2.jpg</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:New_topo_map_DB2.jpg&amp;diff=5524"/>
		<updated>2025-12-05T12:14:03Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: Aleko 2144 загрузил новую версию Файл:New topo map DB2.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Краткое описание ==&lt;br /&gt;
Обновленная топографическая карта за авторством Αίυαη Κεηοβί. Дороги взяты из игры, а всё остальное перерисовано с оригинальной топографической карты. Добавлены значения высот для изобат и рек. Многие дороги находятся как бы в &amp;quot;ущелье&amp;quot;, поэтому лежат ниже изобат.&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:New_topo_map_DB2.jpg&amp;diff=5523</id>
		<title>Файл:New topo map DB2.jpg</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:New_topo_map_DB2.jpg&amp;diff=5523"/>
		<updated>2025-12-05T12:08:06Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: Обновленная топографическая карта за авторством Αίυαη Κεηοβί. Дороги взяты из игры, а всё остальное перерисовано с оригинальной топогра…&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Краткое описание ==&lt;br /&gt;
Обновленная топографическая карта за авторством Αίυαη Κεηοβί. Дороги взяты из игры, а всё остальное перерисовано с оригинальной топографической карты. Добавлены значения высот для изобат и рек. Многие дороги находятся как бы в &amp;quot;ущелье&amp;quot;, поэтому лежат ниже изобат.&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B9_(%D0%94%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B1%D0%BE%D0%B9%D1%89%D0%B8%D0%BA%D0%B8_2)&amp;diff=5521</id>
		<title>История версий (Дальнобойщики 2)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B9_(%D0%94%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B1%D0%BE%D0%B9%D1%89%D0%B8%D0%BA%D0%B8_2)&amp;diff=5521"/>
		<updated>2025-11-08T09:56:03Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики 2]]&lt;br /&gt;
В этой статье описана хронология разработки и все известные версии '''&amp;quot;Дальнобойщиков 2&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
Развитие игры после первого релиза можно разделить на '''три основных этапа''', отличающихся друг от друга как технически (невозможность пропатчить версию одной эры до другой), так и многим другим.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что для удобства в статье используется '''скрытый текст''', который можно раскрыть, нажав на строки с цветным фоном.&lt;br /&gt;
&lt;br /&gt;
[[Image:button_01_dev.jpg|link=История_версий_(Дальнобойщики_2)#Разработка_игры]][[Image:button_02_ht2.jpg|link=История_версий_(Дальнобойщики_2)#Hard_Truck_2]][[Image:button_03_rnr.jpg|link=История_версий_(Дальнобойщики_2)#Дальнобойщики_2]]&lt;br /&gt;
&lt;br /&gt;
[[Image:button_04_kotr.jpg|link=История_версий_(Дальнобойщики_2)#King_of_the_Road]][[Image:button_05_kotr_ru.jpg|link=История_версий_(Дальнобойщики_2)#Дальнобойщики_2_Издание_второе,_дополненное]][[Image:button_06_loc.jpg|link=История_версий_(Дальнобойщики_2)#Прочие локализации]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-customtoggle-TOC&amp;quot; style=&amp;quot;background:#e0e8ff&amp;quot;&amp;gt;'''Развернуть полное содержание'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; id=&amp;quot;mw-customcollapsible-TOC&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Разработка игры ==&lt;br /&gt;
=== 1998 год ===&lt;br /&gt;
Разработка игры началась в мае 1998 года.&amp;lt;ref&amp;gt;[http://web.archive.org/web/20000610020212/http://www.ga-source.com/interviews/hardtruck2.shtml Согласно интервью]&amp;lt;/ref&amp;gt;. На самых ранних скриншотах с неизвестной датой&amp;lt;ref&amp;gt;Источник - [https://archive.org/details/Game.EXE_07_1999/page/n75/mode/2up журнал Game.EXE за июль 1999 г.], но эти скриншоты явно старше любых других&amp;lt;/ref&amp;gt; можно увидеть ЗиЛ из [[Дальнобойщики: Путь к победе|первой части]] с полуприцепом на трассе [[Игровой регион (Дальнобойщики 1)#Кольцо|&amp;quot;Кольцо&amp;quot;]] оттуда же, а также ранний [[Залесск]].&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
ht2_1998_01.jpg&lt;br /&gt;
ht2_1998_02.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В самом раннем [https://archive.org/stream/GameWorldNavigator_1998-07-015#page/n103/mode/2up превью игры] из журнала &amp;quot;Навигатор игрового мира&amp;quot; за июнь 1998 упоминаются следующие особенности:&lt;br /&gt;
*По изначальной задумке мы не только должны были вывозить технические алмазы с комбината, но и привозить на него породу для переработки из ближайшего посёлка, в котором она добывалась. Добраться до посёлка можно было по нескольким перекрытым блок-постами дорогам и по одной скрытой.&lt;br /&gt;
*Товар загружался по тому же принципу, что и в первой части - его необходимо было покупать на собственные деньги. &lt;br /&gt;
*Товар на базах должен был постепенно заканчиваться. При нехватке определённого товара на одной базе, можно было получить заказ на доставку этого товара с другой, где этот товар есть с излишком. В финальной реализации каждая база имеет предопределённый список возможных товаров, которые можно загрузить, и никакой системы потребностей в товаре нет - пункты назначения выбираются случайно.&lt;br /&gt;
*Из связи с внешним миром предполагался только порт (в который должны были переправляться алмазы). В финальной версии к нему присоединился аэропорт.&lt;br /&gt;
*Предполагалось разделение топлива на дизельное и бензин.&lt;br /&gt;
*Мафия могла бы отобрать не только деньги и груз, но и грузовик.&lt;br /&gt;
&lt;br /&gt;
По большей части всё перечисленное - только задумки на ранних этапах разработки и скорее всего, большинство из этого не было реализовано в каком-либо виде в последующие полтора года разработки игры.&lt;br /&gt;
&lt;br /&gt;
К концу 1998 года игра всё ещё использует некоторый контент из первой части: большую часть транспорта (среди которого из нового появляется только [[Газель]]), текстуры дорог и принцип нанесения разметки на некоторые из них. На скриншотах уже демонстрируется смена дня и ночи. Из нестандартных объектов можно увидеть ранний вариант [[СТО]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скриншоты, кроме последних пяти, датированы 2-3 декабря 1998 г.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:photo_03.jpg|Как и в первой части серии, из кабины не видно капот грузовика&lt;br /&gt;
Файл:photo_06.jpg|&lt;br /&gt;
Файл:photo_07.jpg|&lt;br /&gt;
Файл:photo_10.jpg|&lt;br /&gt;
Файл:photo_13.jpg|&lt;br /&gt;
Файл:photo_14.jpg|В ранних версиях горы имели заснеженный вид&lt;br /&gt;
Файл:photo_21.jpg|&lt;br /&gt;
Файл:photo_22.jpg|Для текстуры гор частично заимствован фон трассы &amp;quot;Горный&amp;quot; из первой части.&lt;br /&gt;
Файл:photo_23.jpg|&lt;br /&gt;
Файл:photo_34.jpg|&lt;br /&gt;
Файл:photo_36.jpg|&lt;br /&gt;
Файл:photo_48.jpg|&lt;br /&gt;
Файл:photo_53.jpg|&lt;br /&gt;
Файл:photo_50.jpg|&lt;br /&gt;
Файл:PHOTO309.jpg|&lt;br /&gt;
Файл:X_a3de8ef4.jpg|Здесь и далее - иллюстрации из справки к Hard Truck 2&lt;br /&gt;
Файл:RepairBeta1.jpg|Первый вариант СТО&lt;br /&gt;
Файл:ht2_help_bm41.png|&lt;br /&gt;
Файл:ht2_help_bm42.png|&lt;br /&gt;
Файл:ht2_help_bm44.png|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1999 год ===&lt;br /&gt;
К середине года игра всё ещё имеет текстуры дороги с полностью белой разметкой. На скриншотах можно увидеть большую часть релизного транспорта, встречаются также и необычные экземпляры в виде [[Газель#ГАЗель Милиция |милицейской Газели]] и [[Неизвестный спорткар|спорткара]]. К слову, идентификатор милицейской ГАЗели присутствует во всех релизных версиях игры в файле [[Sch-файлы#vd.sch | vd.sch]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скриншоты, кроме последних двух, датированы 25-26 августа 1999 г. На скриншотах демонстрируются [[Ельнино]] и маршруты до [[Залесск]]а и [[Приозёрск]]а.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:photo020.jpg|Ранняя застройка Ельнино&lt;br /&gt;
Файл:photo023.jpg|&lt;br /&gt;
Файл:photo003.jpg|Стоянка в Ельнино&lt;br /&gt;
Файл:photo005.jpg|&lt;br /&gt;
Файл:photo000.jpg|&lt;br /&gt;
Файл:photo026.jpg|&lt;br /&gt;
Файл:photo055.jpg|&lt;br /&gt;
Файл:photo001.jpg|Дорога на Ельнино&lt;br /&gt;
Файл:photo002.jpg|&lt;br /&gt;
Файл:photo004.jpg|&lt;br /&gt;
Файл:photo006.jpg|&lt;br /&gt;
Файл:photo007.jpg|[[АЗС|Заправка]] у поворота на Приозерск&lt;br /&gt;
Файл:photo051.jpg|&lt;br /&gt;
Файл:photo052.jpg|&lt;br /&gt;
Файл:photo038.jpg|Синяя Газель у заправки&lt;br /&gt;
Файл:photo010.jpg|Поворот на Приозерск&lt;br /&gt;
Файл:photo011.jpg|&lt;br /&gt;
Файл:photo013.jpg|&lt;br /&gt;
Файл:photo014.jpg|&lt;br /&gt;
Файл:photo009.jpg|&lt;br /&gt;
Файл:photo015.jpg|Возле старого варианта [[СТО]] неподалёку от Ельнино&lt;br /&gt;
Файл:photo018.jpg|&lt;br /&gt;
Файл:photo068.jpg|&lt;br /&gt;
Файл:photo090.jpg|&lt;br /&gt;
Файл:photo100.jpg|&lt;br /&gt;
Файл:photo108.jpg|&lt;br /&gt;
Файл:photo126.jpg|&lt;br /&gt;
Файл:RepairBeta2.jpg|Ранний вариант СТО на трассе Залесск-Ельнино&lt;br /&gt;
Файл:photo012.jpg|Диспетчерская в Залесске&lt;br /&gt;
Файл:photo016.jpg|&lt;br /&gt;
Файл:photo021.jpg|&lt;br /&gt;
Файл:photo027.jpg|&lt;br /&gt;
Файл:photo053.jpg|&lt;br /&gt;
Файл:photo101.jpg|&lt;br /&gt;
Файл:photo104.jpg|&lt;br /&gt;
Файл:photo106.jpg|&lt;br /&gt;
Файл:photo110.jpg|&lt;br /&gt;
Файл:photo120.jpg|&lt;br /&gt;
Файл:Шторм дорелизная кабина.jpg|&lt;br /&gt;
Файл:ht2_help_bm56.png|Иллюстрация из справки к Hard Truck 2&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Конец 1999 года ===&lt;br /&gt;
Игра уже во многом похожа на релизную версию 4.0. Из весомых отличий можно отметить совершенно другой эффект мокрого асфальта и отличающуюся реализацию воды. Также можно заметить, что на тот момент ещё не была проработана до конца панель состояния - на всех скриншотах на ней не меняются позиция игрока, оставшееся время, состояние прицепа и направление навигатора.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
ht2_prerelease2000_01.jpg|Ранний вариант СТО на трассе Приозерск - Ельнино&lt;br /&gt;
ht2_prerelease2000_02.jpg|&lt;br /&gt;
ht2_prerelease2000_03.jpg|&lt;br /&gt;
ht2_prerelease2000_04.jpg|Мосты всё ещё имеют белую разметку&lt;br /&gt;
ht2_prerelease2000_05.jpg|&lt;br /&gt;
ht2_prerelease2000_06.jpg|&lt;br /&gt;
ht2_magazines_01.jpg|&lt;br /&gt;
ht2_magazines_02.jpg|&lt;br /&gt;
ht2_prerelease2000_07.jpg|Мокрая дорога очень напоминает свою реализацию в третьей части&lt;br /&gt;
ht2_prerelease2000_08.jpg|&lt;br /&gt;
ht2_prerelease2000_09.jpg|&lt;br /&gt;
ht2_prerelease2000_10.jpg|&lt;br /&gt;
ht2_prerelease2000_11.jpg|Старые указатели&lt;br /&gt;
ht2_prerelease2000_12.jpg|Ранняя панель информации об игроке&lt;br /&gt;
ht2_prerelease2000_24.jpg|&lt;br /&gt;
ht2_prerelease2000_25.jpg|В Шахтах ещё не поставили блоки, перекрывающие дорогу&lt;br /&gt;
ht2_prerelease2000_13.jpg|&lt;br /&gt;
ht2_prerelease2000_14.jpg|&lt;br /&gt;
ht2_magazines_03.jpg|&lt;br /&gt;
ht2_magazines_04.jpg|&lt;br /&gt;
ht2_prerelease2000_15.jpg|&lt;br /&gt;
ht2_prerelease2000_16.jpg|&lt;br /&gt;
ht2_prerelease2000_17.jpg|&lt;br /&gt;
ht2_prerelease2000_18.jpg|&lt;br /&gt;
ht2_prerelease2000_19.jpg|&lt;br /&gt;
ht2_magazines_05.jpg|&lt;br /&gt;
ht2_prerelease2000_20.jpg|&lt;br /&gt;
ht2_magazines_06.jpg|&lt;br /&gt;
ht2_prerelease2000_26.jpg|Подъезд к Бухте со стороны моря не имеет ограждения&lt;br /&gt;
ht2_magazines_07.jpg|&lt;br /&gt;
ht2_magazines_08.jpg|&lt;br /&gt;
ht2_magazines_09.jpg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ранний 2000 год ===&lt;br /&gt;
Панель состояния уже полноценно работоспособна, вода обрела эффекты ряби и волн (использующие Environment-Mapped Bump Mapping), которые сильно изменятся к выходу игры. Одна из сборок того периода разработки использовалась для снятия демо-ролика&amp;lt;ref&amp;gt;Дата создания ролика предположительно не позже февраля 2000.&amp;lt;/ref&amp;gt;, вошедшего в релиз Hard Truck 2.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
ht2_prerelease2000_21.jpg|Первые демонстрации воды с EMBM&lt;br /&gt;
ht2_prerelease2000_22.jpg|Renaul Magnum с текстурой кузова из первой части&lt;br /&gt;
ht2_seaday.jpg|&lt;br /&gt;
ht2_seaday_m.jpg|&lt;br /&gt;
ht2_seanightM.jpg|&lt;br /&gt;
ht2_prerelease2000_23.jpg|&lt;br /&gt;
ht2_prerelease2000_27.jpg|&lt;br /&gt;
ht2_prerelease2000_28.jpg|&lt;br /&gt;
ht2_prerelease2000_29.jpg|&lt;br /&gt;
ht2_prerelease2000_30.jpg|&lt;br /&gt;
ht2_prerelease2000_31.jpg|&lt;br /&gt;
ht2_prerelease2000_32.jpg|&lt;br /&gt;
HTruck2demo_1.png|На развязке отсутствуют указатели&lt;br /&gt;
HTruck2demo_2.png|Наличие разметки на перекрёстке по трассе Приозерск - Южный&lt;br /&gt;
HTruck2demo_3.png|Сообщение о занятом месте приходит на пейджер&lt;br /&gt;
HTruck2demo_4.png|Ранняя расцветка кузова Скании&lt;br /&gt;
HTruck2demo_5.png|Мост на трассе Приозёрск - Южный. Отсутствует ограждение&lt;br /&gt;
V5.png|Посторонний трафик и полиция в шахтах&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hard Truck 2 ==&lt;br /&gt;
Игра выпущена в Северной Америке под названием '''Hard Truck 2''' 15 мая&amp;lt;ref&amp;gt;[https://www.eurogamer.net/articles/article_27244 Источник]. 25 апреля игра ушла &amp;quot;на золото&amp;quot;, 1 мая 2000 датирован пиратский релиз от группы [https://defacto2.net/f/ad21cd4 MYTH TEAM], по всей видимости украденной, либо слитой копии игры&amp;lt;/ref&amp;gt; 2000-го года силами издательства ValuSoft. Ввиду того, что игра сильно, и в основном в худшую сторону отличается от более позднего российского релиза, в русскоязычном сообществе игру иногда называют ''бета'' или ''демо'' версией.&lt;br /&gt;
&lt;br /&gt;
=== Версия 4.0 ===&lt;br /&gt;
[[Файл:ht2ico4.0-5.5.jpg|Иконка начиная c версии 4.0|64px|right]]&lt;br /&gt;
[[Файл:Ht4.0enlogo.jpg|Заставка версии 4.0|безрамки]]&lt;br /&gt;
&lt;br /&gt;
Особенности по сравнению с более поздним российским релизом игры в 2001 году:&lt;br /&gt;
&lt;br /&gt;
'''Игровой процесс'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Ватная управляемость и заносы;&lt;br /&gt;
* Отсутствует [[рация]] и все связанные с ней возможности;&lt;br /&gt;
* Нет светофоров, ограничений скорости и радаров - соответственно, нет штрафов за эти виды нарушений, и нет улучшения «Антирадар»;&lt;br /&gt;
* Отсутствуют нефтебазы и, соответственно, цистерны для перевозки топлива;&lt;br /&gt;
* Нельзя взрывать [[АЗС|заправки]];&lt;br /&gt;
* Отсутствует дальний свет Ctrl+L;&lt;br /&gt;
* Нет большинства легковых автомобилей — в том числе и в роли трафика и декораций;&lt;br /&gt;
* Возможность поставить игру на паузу только клавишей Pause, т.к. клавиши F1-F4 и Esc не останавливают игровой процесс, но на Esc и F4 пропадает возможность контролировать машину (потому что стрелки служат для навигации по этим разделам),что сильно усложняет возможность сохраниться во время гонки или посмотреть количество наличных денег;&lt;br /&gt;
* Нет быстрого сохранения/загрузки;&lt;br /&gt;
* В меню Esc отсуствует пункт &amp;quot;Загрузить игру&amp;quot; (чтобы загрузить другое сохранение, нужно выходить в Главное меню);&lt;br /&gt;
* Нельзя вернуться на только что проданный автомобиль, т.к. после продажи он уезжает, а не остаётся на перепродажу;&lt;br /&gt;
* Присутствует возможность поворачивать камеру мышью при виде из кабины;&lt;br /&gt;
* Отсутствует монитор заднего вида;&lt;br /&gt;
* Трафик часто ведёт себя неадекватно;&lt;br /&gt;
* Встречные машины на поворотах часто заносит с дрифтом боком, в том числе с вылетом на вашу полосу;&lt;br /&gt;
* Трафик можно встретить на скрытых путях;&lt;br /&gt;
* NPC умеют совершать обгон по обочине на полном ходу, не задевая обгоняемую машину;&lt;br /&gt;
* При загрузке сохранённой игры техническое состояние машины и количество топлива автоматически поднимаются до 100%, так что при частых сохранениях и загрузках можно вообще не ремонтировать и заправлять машину;&lt;br /&gt;
* Немного отличаются характеристики скоростей некоторых машин, например, у Зила-фургона всего 5 передач а не 6, так что по ровной дороге без уклона его максимальная скорость составляет около 110-120 км/ч, а у Зила-тягача 85-90 км/ч; аналогично Reno-фургон выдаёт всего 95 км/ч;&lt;br /&gt;
* В целом практически все машины медленнее набирают скорость (будто дефорсированы с завода) и менее устойчивы в управлении, несмотря на совпадение технических характеристик с таковыми в более новых версиях;&lt;br /&gt;
* Более низкая стоимость заправки (полный бак Зила стоит чуть больше 100 долларов, что по игровым меркам пренебрежимо мало);&lt;br /&gt;
* Более низкая стоимость от 1.5 до 3 раз у некоторых улучшений на СТО (форсированный двигатель, вентилируемый тормоз, шины);&lt;br /&gt;
* Немного отличается цена некоторых автомобилей, например, стартовый Зил-фургон стоит $25500 (против $22000 в версиях от 6.х и выше);&lt;br /&gt;
* На кольцевых гонках за победу дают 5000 долларов (против 20000 в версиях 6.х - 7.х);&lt;br /&gt;
* У контрабандных грузов хрупкость не занижена до 0%;&lt;br /&gt;
* Отсутствуют в продаже подержаные и ворованые машины;&lt;br /&gt;
* Более существенная тряска и потеря скорости машины при съезде с проезжей части на грунт (что усложняет объезд, например, бухтинской мостовой развязки-клевера, и преодоление других грунтовых срезов);&lt;br /&gt;
* На срезах между Боровым и Приозёрском машина не застревает в проездах через болото, так что можно использовать любой срез а не только самый верхний;&lt;br /&gt;
* Перепад высоты асфальта на въезде на СТО и АЗС, на котором машину может сильно подкинуть вверх (особенно легковую), так что въезжать нужно на небольшой скорости (что ближе к реальной жизни, но усложняет гонку с соперниками);&lt;br /&gt;
* За доставку контейнеров дают лицензии (по крайней мере иногда);&lt;br /&gt;
* При обмене местами с вашим наёмником вы всегда первый в гонке, т.к. соперники начинают появляться и выезжать со склада отправления только после совершения этого обмена (таким образом, можно всегда выигрывать гонки и получать лицензии не напрягаясь, при этом быстро оказываясь в разных местах карты на разных парковках).&lt;br /&gt;
&lt;br /&gt;
'''Графика'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Лучистый свет от фар, капли дождя на стекле;&lt;br /&gt;
* Многие текстуры отличаются прорисовкой или оттенком, либо меньшего разрешения; в целом тона зелени менее насыщенные и напоминают позднюю осень;&lt;br /&gt;
* Меньше детализация ландшафта и дорог;&lt;br /&gt;
* Зеркала у всех машин расположены выше, от чего будто висят в воздухе;&lt;br /&gt;
* Не поддерживается разрешение экрана 1600х1200;&lt;br /&gt;
* Пыль из под колёс на грунтовых дорогах практически полностью лишает обзора из кабины;&lt;br /&gt;
* Отсутствуют летаюшие опавшие листья и пылевые вихри в воздухе;&lt;br /&gt;
* Отсутствует звук работы пневмоклапанов при торможении.&lt;br /&gt;
&lt;br /&gt;
'''Интерфейс'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Спидометр показывает мили&amp;lt;ref&amp;gt;Можно изменить на километры в файле ''truck.ini'', так же и в более поздних версиях можно сделать мили вместо километров&amp;lt;/ref&amp;gt; и работает без задержек;&lt;br /&gt;
* На панели состояния не отображается количество лицензий на найм и срок их истечения;&lt;br /&gt;
* Количество наличных денег и лицензий можно посмотреть только на F4, а оставшийся срок действия лицензий посмотреть не возможно; на F3 показывает не количество наличных денег, а суммарный капитал вместе со стоимостью транспорта (дублируя эти сведения из F4, что по сути бесполезно);&lt;br /&gt;
* Отсутствуют аватары водителей;&lt;br /&gt;
* Карта имеет только один масштаб, показывающий весь мир целиком; вместо стрелки, указывающей местоположение и направление игрока, используется значок грузовика; не подсвечивается пункт назначения (посмотреть его можно только на F3);&lt;br /&gt;
* Секретные дороги не указываются (даже с чит-кодом); не отображаются места аварийного ремонта дорог (узнать о закрытой трассе можно только по сообщениям на пейджере);&lt;br /&gt;
* Сообщения о неустойках и штрафах приходят на пейджер;&lt;br /&gt;
* Другая иконка exe-файла игры; квадратная заставка при запуске;&lt;br /&gt;
* Разделы главного меню оформлены иначе;&lt;br /&gt;
* Кнопки меню не подсвечиваются при наведении курсора;&lt;br /&gt;
* Курсор прорисовывается очень медленно.&lt;br /&gt;
&lt;br /&gt;
'''Игровой мир'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Небольшие отличия в ландшафте местности [[Игровой регион (Дальнобойщики 2)|игрового мира]] и участков дорог, немного смещены некоторые АЗС, СТО, парковки, с сохранением общей схемы и глобальной планировки карты;&lt;br /&gt;
* Меньшая насыщенность местности деревьями и прочими декоративными объектами и зданиями, во многих местах трассы отсутствуют ограждения (где в более поздних версиях они появились);&lt;br /&gt;
* Американские дорожные знаки;&lt;br /&gt;
* Мины на дорогах с самого начала игры;&lt;br /&gt;
* Отсутствует декоративный транспорт на стоянках.&lt;br /&gt;
&lt;br /&gt;
'''Прочее'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Вступительный ролик длиннее; версия игры, заснятая в демо ролике имеет много отличий от версии 4.0, так как он был записан за несколько месяцев до выхода игры. К тому же, в демо ролике используется музыкальное сопровождение из первой части серии, так как саундрек к игре на момент создания ролика еще не был записан;&lt;br /&gt;
* Отсутствуют почти все внутриигровые ролики;&lt;br /&gt;
&lt;br /&gt;
=== Версии 4.4-5.3 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-customtoggle-htpatches&amp;quot; style=&amp;quot;background:#e3f1da&amp;quot;&amp;gt;Нажмите на эту строку, чтобы узнать подробнее о промежуточных патчах к Hard Truck 2.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; id=&amp;quot;mw-customcollapsible-htpatches&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;'''Версия 4.4'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:Ht4.4enlogo.jpg|Сплэшскрин версии 4.4|безрамки]]&lt;br /&gt;
&lt;br /&gt;
Вышла 16-го мая 2000 года. Исправляет некоторые проблемы с Direct3D на видеокартах Voodoo&amp;lt;ref&amp;gt;Здесь и до версии 5.3 включительно изменения указаны согласно документации.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''Версия 4.5'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:Ht4.5enlogo.jpg|Сплэшскрин версии 4.5|безрамки]]&lt;br /&gt;
&lt;br /&gt;
Патч от 25-го мая 2000 года.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''Версия 4.7'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:Ht4.7enlogo.jpg|Сплэшскрин версии 4.7|безрамки]]&lt;br /&gt;
&lt;br /&gt;
Версия от 2-го июня 2000 года. Устраняет некоторые проблемы с Direct3D на видеокартах Voodoo, а также решает проблемы с джойстиками.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''Версия 5.0'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:Ht5.0enlogo.png|Сплэшскрин версии 5.0|безрамки]]&lt;br /&gt;
&lt;br /&gt;
Версия игры 5.0 издавалась на дисках и не выходила в виде патча. Исполняемый файл датирован 11 июня 2000 года.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''Версия 5.1'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:Ht5.1enlogo.jpg|Сплэшскрин версии 5.1|безрамки]]&lt;br /&gt;
&lt;br /&gt;
Патч вышел 24-го июня. Изменения аналогичны предыдущей версии.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''Версия 5.3'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:Ht5.3enlogo.jpg|Сплэшскрин версии 5.3|безрамки]]&lt;br /&gt;
&lt;br /&gt;
Версия, датированная 23 августа. Изменения аналогичны предыдущим версиям.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Версия 5.5 ===&lt;br /&gt;
[[Файл:Ht5.5enlogo.jpg|Сплэшскрин версии 5.5|безрамки]]&lt;br /&gt;
&lt;br /&gt;
Версия 5.5 появилась 5-го октября 2000 года. Изменения по сравнению с версией 4.0&amp;lt;ref&amp;gt;Возможно, что некоторые изменения появились в предыдущих версиях.&amp;lt;/ref&amp;gt;:&lt;br /&gt;
* Мины на дорогах теперь появляются только при достижении 30% грузоперевозок (но остаются постоянно, а не только когда на вас охотится мафия как в более поздних версиях);&lt;br /&gt;
* Существенно уменьшена ватность управления;&lt;br /&gt;
* Эффекты дождя и тумана были несколько изменены;&lt;br /&gt;
* Километры вместо миль на спидометре и работа спидометра с небольшой задержкой;&lt;br /&gt;
* Заменена иконка Кольца на более заметную.&lt;br /&gt;
Кроме того, согласно документации, обновление игры до версии 5.5:&lt;br /&gt;
* Делает игру более стабильной;&lt;br /&gt;
* Исправляет проблему с отсутствием звука в Windows Me;&lt;br /&gt;
* Исправляет проблему с пропаданием окружения на ускорителях Voodoo;&lt;br /&gt;
* Исправляет проблемы с некоторыми моделями ускорителей, имеющими 8 мегабайт памяти;&lt;br /&gt;
* Исправляет проблему с пропаданием дороги;&lt;br /&gt;
* Делает ИИ более осторожным;&lt;br /&gt;
* Вводит в игру чит-код «MINESOFF», убирающий мины.&lt;br /&gt;
&lt;br /&gt;
=== Версия 5.8 ===&lt;br /&gt;
''См. раздел [[История версий (Дальнобойщики 2)#Truck Racing 2001 — Os Gigantes da Estrada|Truck Racing 2001 — Os Gigantes da Estrada]]''&lt;br /&gt;
&lt;br /&gt;
=== Галерея версий 4.0-5.5 ===&lt;br /&gt;
&lt;br /&gt;
'''Оформление коробочного издания'''&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:ht2_bigbox_cover.jpg|Обложка коробки&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Оформление издания в картонном рукаве'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:ht2_sleeve.jpg|Рукав спереди&lt;br /&gt;
Файл:ht2_sleeve_back.jpg|Рукав сзади&lt;br /&gt;
Файл:ht2_jewel_back.jpg|Задняя сторона Jewel-box с игрой&lt;br /&gt;
Файл:ht2_manual1.jpg|Вкладыш с кратким руководством. Сторона 1&lt;br /&gt;
Файл:ht2_manual2.jpg|Вкладыш с кратким руководством. Сторона 2&lt;br /&gt;
Файл:ht2cd.jpg|Оформление диска.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Оформление Jewel-box издания'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:ht2box.jpg|Изображение с Jewel-box с игрой.&lt;br /&gt;
Файл:ht2boxrearside.jpg|Задняя сторона Jewel-box.&lt;br /&gt;
Файл:ht2cd_alt.jpg|Оформление диска.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Оформление установщика и меню'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:autorun5.jpg|Меню автозапуска диска.&lt;br /&gt;
Файл:setup5.jpg|Фон установщика.&lt;br /&gt;
Файл:ht2menu1.jpg|Главное меню.&lt;br /&gt;
Файл:ht2menu2.jpg|Главное меню. Игра.&lt;br /&gt;
Файл:ht2menu3.jpg|Главное меню. Сетевая игра.&lt;br /&gt;
Файл:ht2menu4.jpg|Главное меню. Сменить водителя.&lt;br /&gt;
Файл:ht2menu5.jpg|Главное меню. Выход из игры.&lt;br /&gt;
Файл:ht2menu6.jpg|Главное меню. Графика.&lt;br /&gt;
Файл:ht2menu7.jpg|Главное меню. Управление.&lt;br /&gt;
Файл:ht2menu8.jpg|Главное меню. Видеоплеер.&lt;br /&gt;
Файл:ht2enloading.jpg|Загрузочный экран.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Скриншоты с отличиями'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:Interior zil4.0.jpg|Кабина грузовиков &amp;quot;[[ЗиЛ]]&amp;quot; в старых версиях.&lt;br /&gt;
Файл:RepairEng.jpg|Меню апгрейда и строка состояния.&lt;br /&gt;
Файл:RepairBeta3.jpg|Вариант [[СТО]].&lt;br /&gt;
Файл:ht2rain.jpg|Другие эффекты дождя на стекле. Автомобиль стоит на месте.&lt;br /&gt;
Файл:ht2rain2.jpg|То же, но автомобиль в движении.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Русская версия&amp;lt;ref&amp;gt;За предоставленный образ большое спасибо пользователю Пикабу '''spirtozaurus'''.&amp;lt;/ref&amp;gt; ===&lt;br /&gt;
Несмотря на то, что в России официально игра вышла на целый год позже в сильно измененном виде, версии 4.0 и 5.5 существуют и в русском переводе, выполненном пиратами, распространявшими игру в постсоветских странах в 2000 году. В целом перевод выполнен довольно небрежно и местами является слишком буквальным. Названия автомобилей и населённых пунктов оставлены на английском языке.&lt;br /&gt;
&amp;lt;br&amp;gt;Также, оригинальный HT2 можно частично русифицировать, изменив параметр ''langv'' на ''rus'' в файле ''[[truck.ini]]''. Кроме того, существует качественный фанатский [https://mega.nz/folder/rY0kTDaY#CPtx6cEzE-1YrAgD4f7FxA перевод версии 5.8], выпущенный в 2020 году.&lt;br /&gt;
&lt;br /&gt;
'''Галерея русской версии 4.0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:ht2rus_autorun.png|Меню автозапуска диска.&lt;br /&gt;
Файл:ht2rus_setup.png|Фон установщика.&lt;br /&gt;
Файл:ht4.0-5.5rulogo.jpg|Сплэшскрин русской версии 4.0.&lt;br /&gt;
Файл:ht2rus_menu1.png|Главное меню.&lt;br /&gt;
Файл:ht2rus_menu2.png|Главное меню. Игра.&lt;br /&gt;
Файл:ht2rus_menu3.png|Главное меню. Сетевая игра.&lt;br /&gt;
Файл:ht2rus_menu4.png|Главное меню. Сменить водителя.&lt;br /&gt;
Файл:ht2rus_menu5.png|Главное меню. Выход из игры.&lt;br /&gt;
Файл:ht2rus_menu6.png|Главное меню. Графика.&lt;br /&gt;
Файл:ht2rus_menu7.png|Главное меню. Управление.&lt;br /&gt;
Файл:ht2rus_menu8.png|Главное меню. Видеоплеер.&lt;br /&gt;
Файл:ht2rus_loading.png|Загрузочный экран.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Дальнобойщики 2 ==&lt;br /&gt;
Первый релиз игры на русском языке состоялся 17 апреля 2001-го года. Данный этап развития характеризуется значительно доработанным [[Игровой регион (Дальнобойщики 2)|игровым миром]] и появлением множества новых возможностей, благодаря которым игра так полюбилась игрокам. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Условное англоязычное наименование '''Rig&amp;amp;Roll''' (в другом варианте '''Rig'n'Roll''') произошло, в первую очередь, от названия папки установки игры&amp;lt;ref&amp;gt;Также оно упоминается непосредственно в игре, а именно в видеоплеере и на текстуре антирадара&amp;lt;/ref&amp;gt;, так как на английском языке версии диапазона 6.5-7.4 никогда официально не выходили&amp;lt;ref&amp;gt;Во всяком случае, достоверных данных о таких изданиях нет, несмотря на существование промо-скриншотов английской версии.&amp;lt;/ref&amp;gt;. Название появилось после отказа от торговой марки Hard Truck, принадлежавшей Буке, и должно было использоваться в зарубежных версиях игры, но еще до российского релиза (анонс зарубежного издания от Ascaron под новым названием '''King of the Road''' состоялся ещё 14 марта 2001&amp;lt;ref&amp;gt;[http://web.archive.org/web/20010216115234fw_/http://www.ascaron.com/englisch/index.html Текст анонса] (на странице нужно нажать кнопку News, чтобы анонс отобразился)&amp;lt;/ref&amp;gt;) было принято решение изменить название игры.&lt;br /&gt;
=== Предрелизные промо-скриншоты ===&lt;br /&gt;
Скриншоты были опубликованы на сайте 1С 20 декабря 2000 года. &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
d2rnr_pre_01.jpg|&lt;br /&gt;
d2rnr_pre_02.jpg|&lt;br /&gt;
d2rnr_pre_03.jpg|Русские надписи нанесены поверх скриншотов английской версии.&lt;br /&gt;
d2rnr_pre_04.jpg|&lt;br /&gt;
d2rnr_pre_05.jpg|Портрет водителя имеет другой фон&lt;br /&gt;
d2rnr_pre_06.jpg|Ранние варианты окна штрафа за превышение и зеркала заднего вида.&lt;br /&gt;
d2rnr_pre_07.jpg|&lt;br /&gt;
d2rnr_pre_08.jpg|&lt;br /&gt;
d2rnr_pre_09.jpg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Зарубежные промо-скриншоты King of the Road ===&lt;br /&gt;
Скриншоты были приурочены к европейскому релизу Дальнобойщиков 2 (King of the Road) в 2002 году, но сняты в англоязычной версии поколения Rig'n'Roll&amp;lt;ref&amp;gt;Судя по раннему дизайну окна штрафа за превышение, использовался внутренний билд игры версии ниже, чем 6.5)&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
d2rnr_pre_10.jpg|&lt;br /&gt;
d2rnr_pre_11.jpg|&lt;br /&gt;
d2rnr_pre_12.jpg|&lt;br /&gt;
d2rnr_pre_13.jpg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Общие отличия от версий 4.0-5.8 ===&lt;br /&gt;
*Значительно переработан [[Игровой_регион_(Дальнобойщики_2)|игровой мир]]: общие маршруты те же, но во многих местах повысилась детализация ландшафта и дорог, появилось большее разнообразие в декоративном оформлении маршрутов, а новые текстуры некоторых трасс придали игре более позитивную атмосферу;&lt;br /&gt;
*Повышено удобство интерфейса, курсор больше не тормозит;&lt;br /&gt;
*Карта теперь имеет два масштаба и показывает направление автомобиля игрока; &lt;br /&gt;
*Появилась [[Рация|рация]], что принесло возможность общаться с другими водителями, милицией и бандитами (с озвученными репликами);&lt;br /&gt;
*Появилась механика перевозки цистерн с горючим и сопутствующая инфраструктура в виде [[Нефтебаза|нефтебаз]];&lt;br /&gt;
*Появились светофоры и радары, милиция теперь следит за проездом на красный свет;&lt;br /&gt;
*Некоторые сообщения пейджера заменены на наглядное изображение результата действий игрока;&lt;br /&gt;
*Появились новые легковые автомобили;&lt;br /&gt;
*Изменено поведение автомобилей в более аркадную сторону: практически все машины стали быстрее и устойчивее (несмотря на отствие отличий в технических параметрах от таковых в более ранних версиях), будто форсированы с завода; у машин с 5-ступенчатой КПП (наприпер, Зила) появилась 6-я передача, а с 9-ступенчатой (например, Mercedes Actions) - 10-я передача, так что существенно повышена их максимальная скорость;&lt;br /&gt;
*Немного увеличен расход топлива, а также существенно (чуть более чем в 10 раз) увеличена стоимость заправки;&lt;br /&gt;
*Появился монитор заднего вида (клавиша M);&lt;br /&gt;
*NPC обрели портреты;&lt;br /&gt;
*Удалена возможность поворачивать камеру мышью в кабине;&lt;br /&gt;
*Новые эффекты дождя;&lt;br /&gt;
*Появились летаюшие опавшие листья и пылевые вихри в воздухе;&lt;br /&gt;
*Появился звук работы пневмоклапанов при торможении;&lt;br /&gt;
*Появилась поддержка разрешения 1600х1200;&lt;br /&gt;
*Сохранения больше не имеют ограничения по слотам;&lt;br /&gt;
*Появилась быстрая загрузка/сохранение;&lt;br /&gt;
*В Главном меню для сохранённых игр теперь показывает скриншот с местом сохранения, дату и время сохранения, так что теперь не нужно вспоминать наугад, какое из сохранений запускать;&lt;br /&gt;
*Новое улучшение автомобиля - Антирадар;&lt;br /&gt;
*Появилось больше внутриигровых роликов;&lt;br /&gt;
*Более мягкая езда машин по грунту с меньшей тряской и подкидыванием;&lt;br /&gt;
*Устранено вырвиглазное мерцание пыли при езде по грунтовой дороге, эффект пылевого следа от машины стал прорисовываться намного мягче;&lt;br /&gt;
*Обновленный вступительный ролик, новый демо-ролик;&lt;br /&gt;
*Новые чит-коды.&lt;br /&gt;
Больше отличий между версиями можно узнать из раздела о [[История_версий_(Дальнобойщики_2)#Hard Truck 2|Hard Truck 2]].&lt;br /&gt;
&lt;br /&gt;
=== Версия 6.2 ===&lt;br /&gt;
Использовалась для отснятия демо-ролика (rignrolldemo, kotrDemo). Возможно, последняя версия со «свободной» камерой в кабине (то есть управляемой мышкой). Версия не предполагала широкого распространения, поэтому отсутствует в открытом доступе.&lt;br /&gt;
&lt;br /&gt;
=== Версия 6.5 ===&lt;br /&gt;
Релизная версия игры&amp;lt;ref&amp;gt;Одно из свидетельств, что игра вышла в версии 6.5 на сайте [http://web.archive.org/web/20100310065954/http://rus-trucksims.narod.ru/db2.htm Русский TRUCKSIMS]. К тому же, первая распространённая версия 6.6 доступна в виде [ftp://ftp.softlab-nsk.com/pub/rignroll/ патча (rnrp0422.exe)] и датирована более поздней датой выхода.&amp;lt;/ref&amp;gt;, вышедшая 17-го апреля 2001-го года. Судя по всему, тираж версии был невелик&amp;lt;ref&amp;gt;Хотя патч до версии 6.6 и выпущен 22 апреля, его исполняемый файл датирован 10 апреля, что на неделю раньше официального выхода игры. Но с учетом вышесказанного, это может говорить о том, что версию 6.5 сменили на конвейере довольно быстро.&amp;lt;/ref&amp;gt;, поэтому на данный момент её нет в открытом доступе.&lt;br /&gt;
&lt;br /&gt;
=== Версии 6.6-7.4 ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-customtoggle-rnrpatches&amp;quot; style=&amp;quot;background:#e3f1da&amp;quot;&amp;gt;Нажмите на эту строку, чтобы узнать подробнее о патчах к Дальнобойщикам 2.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; id=&amp;quot;mw-customcollapsible-rnrpatches&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''Версия 6.6'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:rnrico6.6hd.jpg|Значок версии 6.6|64px|right]]&lt;br /&gt;
[[Файл:Rnr6.6ru.jpg|безрамки|Заставка версии 6.6]]&lt;br /&gt;
 &lt;br /&gt;
Версия вышла 22-го апреля 2001-го года. Одна из версий, выпускавшихся на дисках.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''Версия 6.7'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:rnrico7.2-7.4hd.jpg|Значок начиная c версии 6.7|64px|right]]&lt;br /&gt;
[[Файл:Rnr6.7ru.jpg|безрамки|Стандартная заставка версии 6.7]]&lt;br /&gt;
[[Файл:RnR67_title.png|безрамки|Нестандартная заставка версии 6.7]]&lt;br /&gt;
&lt;br /&gt;
Патч от 7-го мая. На FTP-сервере SoftLab-NSK он представлен в двух вариантах: в [ftp://ftp.softlab-nsk.com/pub/rignroll/rnrp0507.exe.1 первом] присутствует нестандартный логотип игры, который планировался для английской версии игры, когда рабочим названием еще было Rig&amp;amp;Roll, и баг, связанный с отсутствием капель воды на лобовом стекле во время дождя. В связи с этим, на следующий день был выпущен [ftp://ftp.softlab-nsk.com/pub/rignroll/rnrp0507.exe второй] вариант патча, в котором используется обычная заставка и исправлен баг с дождём.&lt;br /&gt;
&lt;br /&gt;
Патч имеет официальный список исправлений:&lt;br /&gt;
* Устранены падения при сохранении и загрузке игр&lt;br /&gt;
* Уменьшены лаги&lt;br /&gt;
* Улучшена работа навигатора&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''Версия 6.9'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:Rnr6.9ru.jpg|безрамки|Заставка версии 6.9]]&lt;br /&gt;
&lt;br /&gt;
Патч, вышедший 3-го июня 2001-го.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''Версия 7.0'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:Rnr7.0ru.jpg|безрамки|Заставка версии 7.0]]&lt;br /&gt;
&lt;br /&gt;
Версия от 18-го июня. В отличие от предыдущих версий, игра ставится на паузу при нажатии на F1-F3.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''Версия 7.1'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:Rnr7.1ru.jpg|безрамки|Заставка версии 7.1]]&lt;br /&gt;
&lt;br /&gt;
Версия, вышедшая 29-го июня.&lt;br /&gt;
Официальный список исправлений:&lt;br /&gt;
* Устранены падения при сохранении и загрузке игр&lt;br /&gt;
* Уменьшены лаги&lt;br /&gt;
* Улучшена работа навигатора&lt;br /&gt;
* Ускорена загрузка игры&lt;br /&gt;
* Устранены падения в игре&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''Версия 7.2'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:Rnr7.2ru.jpg|безрамки|Заставка версии 7.2]]&lt;br /&gt;
&lt;br /&gt;
Версия за июль 2001-го. В виде патча не выходила, выпускалась во всех последующих после версии 6.6 тиражах игры на дисках (за исключением литовской версии). Даже наиболее поздние известные переиздания этого поколения игры на дисках 2009 года имеют версию 7.2.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;big&amp;gt;Версия 7.3&amp;lt;/big&amp;gt;'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:Rnr7.3ru.jpg|безрамки|Заставка версии 7.3]]&lt;br /&gt;
&lt;br /&gt;
Патч, датированный 11 сентября 2001-го, описание совпадает с версией 7.1:&lt;br /&gt;
* Устранены падения при сохранении и загрузке игр&lt;br /&gt;
* Уменьшены лаги&lt;br /&gt;
* Улучшена работа навигатора&lt;br /&gt;
* Ускорена загрузка игры&lt;br /&gt;
* Устранены падения в игре&lt;br /&gt;
Также, заметное отличие по сравнению с версией 7.2:&lt;br /&gt;
* Исправлены некоторые ошибки ИИ, в частности, NPC теперь более корректно объезжают остановившийся на дороге автомобиль, а не врезаются в него.&lt;br /&gt;
Кроме того, начиная с данной версии в игре имеется ошибка, из-за которого автомобили &amp;quot;залипают&amp;quot; друг в друге при столкновениях.&lt;br /&gt;
&lt;br /&gt;
На дисках эта версия издавалась [[История версий (Дальнобойщики 2)#Kelyje-II|в Литве]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''Версия 7.4'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:Rnr7.4ru.jpg|безрамки|Заставка версии 7.4]]&lt;br /&gt;
&lt;br /&gt;
Последний патч для поколения, вышедший в марте 2004-го.&lt;br /&gt;
&lt;br /&gt;
Основные заметные изменения по сравнению с 7.3:&lt;br /&gt;
* Улучшен скилл соперников, выиграть гонку стало существенно сложнее;&lt;br /&gt;
* Более сложное управление при манёврах с грузом (больше вероятность перевернуться);&lt;br /&gt;
* Исправлены проблемы, которые могут проявится при использовании Windows XP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Галерея версий 6.5-7.4 ===&lt;br /&gt;
'''Big-box 2001 года'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:Rnr_bigbox_promo.jpeg|Обложка (промо)&lt;br /&gt;
Файл:Rnr_bigbox_cover.jpg|Обложка (скан)&lt;br /&gt;
Файл:Rnr_bigbox_back.jpg|Задняя сторона коробки&lt;br /&gt;
Файл:Rnr_bigbox_manual.jpg|Обложка руководства пользователя&lt;br /&gt;
Файл:rnrcd0.jpg|Внешний вид диска&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Оригинальное оформление Jewel-box и диска с 2001 года'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:Дб2t.jpg|Обложка&lt;br /&gt;
Файл:rnrboxrearside.jpg|Задняя сторона коробки&lt;br /&gt;
Файл:rnrcd0.jpg|Внешний вид диска&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Диск-приложение к журналу &amp;quot;Домашний компьютер&amp;quot; №2'2002'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Rnrcdmagazine2.jpg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Издание с рекламой журнала &amp;quot;Домашний компьютер&amp;quot;'''&amp;lt;br&amp;gt;&lt;br /&gt;
Ориентировочно появилось в 2004 году.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:Дб2t.jpg|Обложка&lt;br /&gt;
Файл:rnrboxrearsidemagazine.jpg|Задняя сторона коробки&lt;br /&gt;
Файл:rnrcdmagazine.jpg|Внешний вид диска&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Оформление дисков в переиздании от 6 ноября 2009 года&amp;lt;ref&amp;gt;[https://web.archive.org/web/20100313150123/http://games.1c.ru/kotr_2/ Страница на сайте 1С]&amp;lt;/ref&amp;gt;'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:rnr_jewel_2009.jpg|Обложка (промо)&lt;br /&gt;
Файл:rnr_jewel_2009_scan.jpg|Обложка (скан)&lt;br /&gt;
Файл:rnr_jewel_2009_rearside.jpg|Скан задней стороны обложки&lt;br /&gt;
Файл:rnrcd.jpg|Внешний вид диска&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Оформление установщика и меню'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:autorun6-7.jpg|Меню автозапуска диска.&lt;br /&gt;
Файл:setup6-7.jpg|Фон установщика.&lt;br /&gt;
Файл:rnrmenu1.jpg|Главное меню.&lt;br /&gt;
Файл:rnrmenu2.jpg|Главное меню. Игра.&lt;br /&gt;
Файл:rnrmenu3.jpg|Главное меню. Сетевая игра.&lt;br /&gt;
Файл:rnrmenu4.jpg|Главное меню. Сменить водителя.&lt;br /&gt;
Файл:rnrmenu5.jpg|Главное меню. Выход из игры.&lt;br /&gt;
Файл:rnrmenu6.jpg|Главное меню. Графика.&lt;br /&gt;
Файл:rnrmenu7.jpg|Главное меню. Управление.&lt;br /&gt;
Файл:rnrmenu8.jpg|Главное меню. Видеоплеер.&lt;br /&gt;
Файл:rnrloading.jpg|Загрузочный экран.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Скриншоты с отличиями'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:rnrrain.jpg|Новый, относительно предыдущих версий, эффект мокрого стекла. &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Прочее ===&lt;br /&gt;
Каждая версия имеет альтернативную неиспользуемую англоязычную заставку. Какого-то практического смысла они не несут и остались только в качестве рудимента из первой части серии и старых версий Дальнобойщиков 2, когда локализацию игры можно было сменить (в случае с Hard Truck 2 только частично) через файл ''[[truck.ini]]''.&lt;br /&gt;
&lt;br /&gt;
Наибольший интерес представляет заставка, которую можно найти в версии 6.6. На ней изображен ранний логотип '''King of the Road''' в виде короны. Этот логотип также можно было заметить на значке версии 6.6 (а вместе с ней, наверняка, и в версии 6.5). Позже логотип был заменён на стилизованные буквы ''KR'' по аналогии с буквами ''RNR'' в русской версии. &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:rnr6.6eng_splash.png|Альтернативная заставка версии 6.6&lt;br /&gt;
Файл:rnr6.7eng_splash.png|Альтернативная заставка версии 6.7&lt;br /&gt;
Файл:kotr1.0_splash.png|Альтернативная заставка версии 6.9&lt;br /&gt;
Файл:kotr1.1.jpg|Альтернативная заставка версий 7.0-7.3&lt;br /&gt;
Файл:kotr1.3.jpg|Альтернативная заставка версии 7.4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== King of the Road ==&lt;br /&gt;
Поколение игры, известное в России под названием «Дальнобойщики 2 - Издание второе, дополненное», началось ещё в 2001-м году, с выходом игры в Германии буквально через 2 месяца после релиза в России версии 6.5.&lt;br /&gt;
&lt;br /&gt;
=== Общие отличия от русской версии 2003-го года ===&lt;br /&gt;
* Каждая локализация игры полностью озвучена на соответствующий язык;&lt;br /&gt;
* Чёрные полицейские [[BMW M5]];&lt;br /&gt;
* Другие [https://rnr-wiki.ru/index.php/Файл:NPC_EN.jpg аватары игрока и NPC];&lt;br /&gt;
* Другой шрифт названия игры (Formal436 BT).&lt;br /&gt;
&lt;br /&gt;
Отличия этого поколения от предыдущих см. далее, [[История версий (Дальнобойщики 2)#Дальнобойщики 2 Издание второе, дополненное|в разделе о русской версии]].&lt;br /&gt;
&lt;br /&gt;
Данные издания имеют новую нумерацию версий, начинающуюся с 1.0. &lt;br /&gt;
&lt;br /&gt;
=== Версия 1.0 ===&lt;br /&gt;
[[Файл:kotrico8.0-8.2hd.jpg|Значок начиная c версии 1.0|64px|right]]&lt;br /&gt;
[[Файл:Kotr1.0 splash.png|безрамки|Заставка версии 1.0]]&lt;br /&gt;
&lt;br /&gt;
Анонс зарубежных версий Дальнобойщиков 2 издательством Ascaron состоялся 14 марта 2001. Версия 1.0 вышла исключительно на немецком языке 26 июня 2001 года под названием '''King of the Road: Das Gesetz der Straße'''.&amp;lt;br&amp;gt;&lt;br /&gt;
Оригинальная немецкая версия имеет нестандартную для игры систему защиты SafeDisc - игра проверяет наличие диска непосредственно перед запуском игры, а не после, как в прочих изданиях и локализациях.&lt;br /&gt;
&lt;br /&gt;
=== Версия 1.1 ===&lt;br /&gt;
[[Файл:Kotr1.1.jpg|безрамки|Заставка версии 1.1]]&lt;br /&gt;
&lt;br /&gt;
Первый и единственный патч для немецкой версии игры вышел 19 октября 2001.&lt;br /&gt;
&lt;br /&gt;
Включает в себя следующие изменения:&lt;br /&gt;
* Улучшен ИИ&lt;br /&gt;
* Трафик реже блокирует дорогу&lt;br /&gt;
* Количество машин трафика теперь может быть увеличено на 50%&lt;br /&gt;
* Корректировка денежной награды за победу на Кольце&lt;br /&gt;
* Улучшение производительности&lt;br /&gt;
* Исправлены случайные сбои при использовании видеокарты GeForce 3&lt;br /&gt;
* Исправление прочих сбоев&lt;br /&gt;
* Исправление Force Feedback для рулей от Microsoft&lt;br /&gt;
* Устранены графические проблемы с видеокартами Kyro II&lt;br /&gt;
&lt;br /&gt;
Сохранения совместимы с последующей версией 1.3 и её русскоязычным аналогом 8.0.&lt;br /&gt;
&lt;br /&gt;
В январе 2002-го года стало известно, что издательство Ascaron не будет издавать английскую версию King of the Road.&lt;br /&gt;
&lt;br /&gt;
=== Галерея версий 1.0-1.1 ===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:King-of-the-Road-Ascaron.jpg|Обложка издания&lt;br /&gt;
Файл:kotr_ascaron_cover.jpg|Скан обложки&lt;br /&gt;
Файл:kotr_ascaron_inner.jpg|Внутренняя сторона&lt;br /&gt;
Файл:kotr_ascaron_cd.jpg|Диск с игрой&lt;br /&gt;
Файл:kotr_ascaron_manual.jpg|Руководство пользователя ([https://archive.org/details/kingoftheroad-manual-german/mode/2up ссылка])&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Версия 1.3 ===&lt;br /&gt;
[[Файл:kotr1.3.jpg|безрамки|Заставка версии 1.3]]&lt;br /&gt;
&lt;br /&gt;
Данная версия выходила в Европе на нескольких языках. Известны локализации на английский, немецкий, французский и испанский языки. Также, планировалась польская версия от издательства '''CD Project''', но она так и не увидела свет.&lt;br /&gt;
&lt;br /&gt;
==== Английская версия ====&lt;br /&gt;
Выпущена 7 июня 2002 года силами издательства '''JoWood'''. Эта же версия выпущена в цифровом магазине '''GOG.com''' в 2019 году (при скачивании англоязычного дистрибутива)&lt;br /&gt;
&lt;br /&gt;
'''Галерея английской версии игры'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Обложки'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:King-of-the-Road-Eur.jpg|Обложка игры.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Издание с [[Бонусный_диск#Бонусный диск от JoWood|бонусным диском]]'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
kotr_with_bonus1.jpg&lt;br /&gt;
kotr_with_bonus2.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Оформление'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:kotr_autorun_eng.png|Меню автозапуска диска.&lt;br /&gt;
Файл:kotr_setup_eng.png|Фон установщика.&lt;br /&gt;
Файл:kotrenmenu1.jpg|Главное меню.&lt;br /&gt;
Файл:kotrenmenu2.jpg|Главное меню. Игра.&lt;br /&gt;
Файл:kotrenmenu3.jpg|Главное меню. Сетевая игра.&lt;br /&gt;
Файл:kotrenmenu4.jpg|Главное меню. Сменить водителя.&lt;br /&gt;
Файл:kotrenmenu5.jpg|Главное меню. Выход из игры.&lt;br /&gt;
Файл:kotrenmenu6.jpg|Главное меню. Графика.&lt;br /&gt;
Файл:kotrenmenu7.jpg|Главное меню. Управление.&lt;br /&gt;
Файл:kotrenmenu8.jpg|Главное меню. Видеоплеер.&lt;br /&gt;
Файл:kotrenloading.jpg|Загрузочный экран.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Другие локализации ====&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-customtoggle-kotrlocal&amp;quot; style=&amp;quot;background:#e3f1da&amp;quot;&amp;gt;Нажмите на эту строку, чтобы узнать подробнее о локализациях King of the Road.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; id=&amp;quot;mw-customcollapsible-kotrlocal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
'''Немецкая версия'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Немецкая версия была переиздана издательством '''Jowood''' в 2002 году. Обновления для версии 1.1 от Ascaron не выходило.&lt;br /&gt;
&lt;br /&gt;
'''Французская версия'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Французская версия игры, выпущенная '''JoWood''' в 2002 году.&lt;br /&gt;
&lt;br /&gt;
'''Галерея французской версии'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Обложки'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
kotr_gg_cover_fr.jpg|Обложка диска из состава сборника 15 Giant Games Vol.1&lt;br /&gt;
kotr_gg_cd_fr.jpg|Диск из сборника&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Оформление установщика и меню'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:kotr_autorun_fr.png|Меню автозапуска.&lt;br /&gt;
Файл:kotr_setup_fr.png|Фон установщика игры.&lt;br /&gt;
Файл:kotr_menu1_fr.png|Главное меню.&lt;br /&gt;
Файл:kotr_menu2_fr.png|Главное меню. Игра.&lt;br /&gt;
Файл:kotr_menu3_fr.png|Главное меню. Сетевая игра.&lt;br /&gt;
Файл:kotr_menu4_fr.png|Главное меню. Сменить водителя.&lt;br /&gt;
Файл:kotr_menu5_fr.png|Главное меню. Выход из игры.&lt;br /&gt;
Файл:kotr_menu6_fr.png|Главное меню. Графика.&lt;br /&gt;
Файл:kotr_menu7_fr.png|Главное меню. Управление.&lt;br /&gt;
Файл:kotr_menu8_fr.png|Главное меню. Видеоплеер.&lt;br /&gt;
Файл:kotr_loading_fr.png|Загрузочный экран.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Испанская версия'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[Файл:kotr_sp_splashscreen.jpg|безрамки|Заставка испанской версии 1.3]]&lt;br /&gt;
&lt;br /&gt;
Испанская версия игры, выпущенная '''ZetaGames''' 19 февраля 2004 года. &lt;br /&gt;
&lt;br /&gt;
'''Галерея испанской версии'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Оформление установщика и меню'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:sp_autorun.jpg|Меню автозапуска.&lt;br /&gt;
Файл:sp_setup.jpg|Фон установщика игры.&lt;br /&gt;
Файл:kotr_menu1_sp.png|Главное меню.&lt;br /&gt;
Файл:kotr_menu8_sp.png|Главное меню. Игра.&lt;br /&gt;
Файл:kotr_menu2_sp.png|Главное меню. Сетевая игра.&lt;br /&gt;
Файл:kotr_menu3_sp.png|Главное меню. Сменить водителя.&lt;br /&gt;
Файл:kotr_menu4_sp.png|Главное меню. Выход из игры.&lt;br /&gt;
Файл:kotr_menu5_sp.png|Главное меню. Графика.&lt;br /&gt;
Файл:kotr_menu6_sp.png|Главное меню. Управление.&lt;br /&gt;
Файл:kotr_menu7_sp.png|Главное меню. Видеоплеер.&lt;br /&gt;
Файл:sp_loadpix.jpg|Загрузочный экран.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Дальнобойщики 2 Издание второе, дополненное ==&lt;br /&gt;
'''&amp;quot;Издание второе, дополненное&amp;quot;''' было выпущено 16 мая 2003 года. Издание является русской локализацией вышедшей в 2002 году европейской версии игры под названием King of the Road. При этом история включенных изменений начинается ещё с выхода [[King of the Road|немецкой версии игры]] в 2001 году.&lt;br /&gt;
&lt;br /&gt;
Самые главные отличия от прежних изданий, повлиявшие на геймплей - это расширенные возможности для легковушек (возможность начать игру сразу на легковушке, специфичные грузы на складах только для легковушек, доступность части легковушек с самого начала игры, как для покупки, так и для найма), а также расширенные возможности на СТО и АЗС (необходимость останавливаться в режиме &amp;quot;Симулятор&amp;quot;, возможность выбирать какие системы автомобиля ремонтировать и сколько топлива заливать, несколько новых улучшенных запчастей). Также имеется множество более мелких измерений (полный список см. далее).&lt;br /&gt;
&lt;br /&gt;
=== Версия 8.0 ===&lt;br /&gt;
[[Файл:kotrico8.0-8.2hd.jpg|Значок начиная c версии 8.0|64px|right]]&lt;br /&gt;
[[Файл:Kotr8.0.jpg|безрамки|Заставка версии 8.0]]&lt;br /&gt;
&lt;br /&gt;
Отличия от версий 6.х-7.х:&lt;br /&gt;
* В режиме &amp;quot;Симулятор&amp;quot; для заправки и ремонта машины появилась необходимость останавливаться, а на АЗС и СТО для игрока добавлен расширенный интерфейс, позволяющий выбрать, сколько топлива залить или какие именно узлы машины ремонтировать; показана стоимость топлива за литр и стоимость ремонта каждого отдельного узла автомобиля; процесс заливки топлива теперь занимает некоторое время (при этом, в режиме &amp;quot;Аркадный&amp;quot; сохранилась возможность как в предыдущих версиях игры мгновенной полной заправки и ремонта на ходу, без необходимости останавливаться);&lt;br /&gt;
* На СТО увеличена стоимость большинства улучшений (в среднем в 3 раза) и добавлены некоторые новые [[СТО|улучшения]];&lt;br /&gt;
* Изменено расположение скрытых [[АЗС]];&lt;br /&gt;
* Появилась возможность в начале игры покупать некоторые легковые автомобили ([[Газель|Газель Люкс]], [[Джип]], [[Пикап]], [[Сафари]], [[Кайман]], [[BMW M5]]) и даже начать игру сразу на легковом автомобиле [[Джип]];&lt;br /&gt;
* Добавлено больше мелких декоративных элементов игрового мира: бочки (особенно возле АЗС и СТО), ограждения, небольшие башни и постройки на пути в [[Алмазный]];&lt;br /&gt;
* Появилось разделение игрового региона на 5 административных округов (добавлены соответствующие дорожные таблички), при пересечении границ которых прекращается погоня милиции за игроком;&lt;br /&gt;
* Убран завал в тоннеле [[Шахты]]-[[Боровое]], который раньше перекрывал треть ширины дороги;&lt;br /&gt;
* Появилась возможность сбивать светофоры, радары, небольшие деревья;&lt;br /&gt;
* Превышение скорости могут фиксировать не только радары, но и милицейские патрули;&lt;br /&gt;
* Увеличен штраф за езду на ворованном автомобиле (с 36% до 80% от стоимости новой машины);&lt;br /&gt;
* Новые виды грузов, в том числе специфичные грузы, предназначенные для перевозки только на легковых автомобилях (например, &amp;quot;Зарплата&amp;quot;);&lt;br /&gt;
* На [[Кольцо|Кольце]] за победу дают $5000 вместо $20000;&lt;br /&gt;
* Изменена раскраска некоторых прицепов;&lt;br /&gt;
* Добавлена возможность удалять сохранённые игры;&lt;br /&gt;
* Допущена ошибка, в результате которой вид из кабин грузовых автомобилей стал значительно ниже (водитель Шторма находится чуть выше, чем водитель Джипа);&lt;br /&gt;
* Увеличена громкость двигателя легковушек;&lt;br /&gt;
* Добавлены более отчётливые звуки повреждений;&lt;br /&gt;
* Улучшен ИИ соперников;&lt;br /&gt;
* Удалён ролик начала новой игры;&lt;br /&gt;
* Уменьшена максимальная скорость DAF до ~200 км/ч (в версии 7.х можно было выжать порядка 240 км/ч);&lt;br /&gt;
* Исправлено довольно большое количество мелких неполадок. Игра теперь корректно работает в Windows XP и её даже можно сворачивать, хотя и не без проблем.&lt;br /&gt;
&lt;br /&gt;
=== Версия 8.1 ===&lt;br /&gt;
[[Файл:Kotr8.1.jpg|безрамки|Заставка версии 8.1]]&lt;br /&gt;
&lt;br /&gt;
Версия датирована 15-м января 2004-го года.&lt;br /&gt;
Основные отличия от версии 8.0:&lt;br /&gt;
* Исправлены проблемы, которые могут проявиться при запуске игры на Windows XP;&lt;br /&gt;
* Исправлены возможные потери фокуса при использовании других операционных систем.&lt;br /&gt;
&lt;br /&gt;
=== Версия 8.2 ===&lt;br /&gt;
[[Файл:Kotr8.2.jpg|безрамки|Заставка версии 8.2]]&lt;br /&gt;
&lt;br /&gt;
Версия появилась в 2008 году с очередным тиражом &amp;quot;Издания второго, дополненного&amp;quot;. Отдельным патчем официально не выпускалась, но распространялась фанатами в виде единственного файла - King.exe. Единственное заметное отличие от предыдущих версий - убрана проверка на наличие диска в приводе.&lt;br /&gt;
&lt;br /&gt;
=== Галерея версий 8.0-8.2 ===&lt;br /&gt;
'''Оригинальное оформление Jewel-box и дисков с 2003 года'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:Kotr jewel 2003.jpg|Обложка.&lt;br /&gt;
Файл:kotrcd.jpg|Диск с игрой&lt;br /&gt;
Файл:kotrcd2.jpg|Бонусный диск&lt;br /&gt;
Файл:kotr_jewel_rear_side 2003.jpg|Задняя сторона Jewel-box.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Оформление c 2004 года'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:kotrbox.jpg|Обложка. Появилось указание количества дисков.&lt;br /&gt;
Файл:kotrcd.jpg|Диск с игрой&lt;br /&gt;
Файл:kotrcd2.jpg|Бонусный диск&lt;br /&gt;
Файл:Kotr jewel rear side 2004.jpg|Задняя сторона Jewel-box с игрой версии 8.1 (c 2004 г.)&lt;br /&gt;
Файл:kotr_jewel_rear_side.jpg|Задняя сторона Jewel-box с игрой версии 8.2 (2008 г.). Отличается текстом внизу.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Оформление дисков в переиздании от 21 сентября 2009 года&amp;lt;ref&amp;gt;[https://web.archive.org/web/20240301143139/https://softclub.ru/games/pc/278-dalnobojshhiki-2-izdanie-vtoroe-dopolnennoe Страница на сайте СофтКлаб]&amp;lt;/ref&amp;gt;'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:KotrJewel2007.jpg|Обложка (промо)&lt;br /&gt;
Файл:Kotr Jewel 2009.jpg|Обложка (скан)&lt;br /&gt;
Файл:Kotr2009 cd1.jpg|Диск с игрой&lt;br /&gt;
Файл:Kotr2009 cd2.jpg|Бонусный диск&lt;br /&gt;
Файл:Kotr2009 jewel back.jpg|Задняя сторона Jewel-box&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Оформление дисков в переиздании от 17 марта 2010 года&amp;lt;ref&amp;gt;[https://web.archive.org/web/20240301143419/https://softclub.ru/games/pc/20364-dalnobojshhiki-2-izdanie-vtoroe-dopolnennoe Страница издания на сайте SoftClub]&amp;lt;/ref&amp;gt;'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:Kotr2010sleeve.jpg|Картонный рукав спереди (промо)&lt;br /&gt;
Файл:kotr2010sleeve_scan.jpg|Скан рукава&lt;br /&gt;
Файл:kotr2010sleeve_back.jpg|Рукав сзади&lt;br /&gt;
Файл:kotr2010_jewel.jpg|Обложка Jewel-box&lt;br /&gt;
Файл:kotr2010_dvd.jpg|DVD с игрой&lt;br /&gt;
Файл:kotr2010_jewel_back.jpg|Задняя сторона Jewel-box&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Оформление переиздания 2012 года'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:Kotr Jewel 2012.jpg|Обложка Jewel-box&lt;br /&gt;
Файл:Kotr2012 dvd.jpg|DVD с игрой&lt;br /&gt;
Файл:Kotr2012 jewel back.jpg|Задняя сторона Jewel-box&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Оформление установщика и меню'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:autorun8.jpg|Меню автозапуска диска.&lt;br /&gt;
Файл:setup8.jpg|Фон установщика.&lt;br /&gt;
Файл:kotrrumenu1.jpg|Главное меню.&lt;br /&gt;
Файл:kotrrumenu2.jpg|Главное меню. Игра.&lt;br /&gt;
Файл:kotrrumenu3.jpg|Главное меню. Сетевая игра.&lt;br /&gt;
Файл:kotrrumenu4.jpg|Главное меню. Сменить водителя.&lt;br /&gt;
Файл:kotrrumenu5.jpg|Главное меню. Выход из игры.&lt;br /&gt;
Файл:kotrrumenu6.jpg|Главное меню. Графика.&lt;br /&gt;
Файл:kotrrumenu7.jpg|Главное меню. Управление.&lt;br /&gt;
Файл:kotrrumenu8.jpg|Главное меню. Видеоплеер.&lt;br /&gt;
Файл:kotrruloading.jpg|Загрузочный экран.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Скриншоты с отличиями'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:Repair8.1.jpg|Новое меню СТО.&lt;br /&gt;
Файл:kotrfueling.jpg|Меню заправки.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Прочие локализации ==&lt;br /&gt;
''О локализациях '''King of the Road''' см. в [[История_версий_(Дальнобойщики_2)#Другие локализации|этой части статьи]] ''&lt;br /&gt;
=== Truck Racing 2001 — Os Gigantes da Estrada ===&lt;br /&gt;
[[Файл:truck_racing_2001_splashscreen.jpg|безрамки|Заставка португальской версии 5.8]]&lt;br /&gt;
&lt;br /&gt;
Португальская локализация '''Hard Truck 2'''. Имеет версию 5.8, точная дата выхода неизвестна, но исполняемый файл датирован '''5 июня 2001 года''', что даже позже даты выпуска версии 6.9 на русском языке. Заметные изменения:&lt;br /&gt;
*Полный перевод на португальский язык (кроме названий населенных пунктов);&lt;br /&gt;
*Некоторые технические доработки по сравнению в предыдущими версиями;&lt;br /&gt;
*Значок Кольца из первых версий (4.0+);&lt;br /&gt;
*Установочный дистрибутив включает в себя демо-ролик с португальским логотипом и в более высоком качестве, чем тот, что входит в состав Hard Truck 2, но он не используется игрой и даже не копируется при установке. Вместо него воспроизводится оригинальный ролик.&lt;br /&gt;
&lt;br /&gt;
====Галерея португальской версии 5.8====&lt;br /&gt;
'''Оформление DVD-box с игрой'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
файл:Pc_truck_racing_2001.png|Обложка игры.&lt;br /&gt;
файл:Pc_truck_racing_2001_cd.jpg|Внешний вид диска.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Оформление установщика и меню'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:pt_autorun.jpg|Меню автозапуска.&lt;br /&gt;
Файл:pt_setup.jpg|Фон установщика игры.&lt;br /&gt;
Файл:kotr_menu1_pt.png|Главное меню.&lt;br /&gt;
Файл:kotr_menu2_pt.png|Главное меню. Игра.&lt;br /&gt;
Файл:kotr_menu3_pt.png|Главное меню. Сетевая игра.&lt;br /&gt;
Файл:kotr_menu4_pt.png|Главное меню. Сменить водителя.&lt;br /&gt;
Файл:kotr_menu5_pt.png|Главное меню. Выход из игры.&lt;br /&gt;
Файл:kotr_menu6_pt.png|Главное меню. Графика.&lt;br /&gt;
Файл:kotr_menu7_pt.png|Главное меню. Управление.&lt;br /&gt;
Файл:kotr_menu8_pt.png|Главное меню. Видеоплеер.&lt;br /&gt;
Файл:pt_loadpix.jpg|Загрузочный экран.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kelyje-II ===&lt;br /&gt;
[[Файл:Kelyje2 splashscreen.jpg|безрамки|Заставка литовской версии 7.3]]&lt;br /&gt;
&lt;br /&gt;
Литовская версия игры, изданная '''Akelotė ir Ko.''' и '''1С''' в 2001-м году. Относится к поколению версий Rig&amp;amp;Roll, полностью локализована на литовский язык.&lt;br /&gt;
&lt;br /&gt;
==== Галерея литовской версии 7.3 ====&lt;br /&gt;
'''Оформление Jewel-box с игрой'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:kelyje-2_cover_2.jpg|Обложка&lt;br /&gt;
Файл:kelyje-2_inner_1.jpg|Разворот обложки&lt;br /&gt;
Файл:kelyje-2_inner_2.jpg|Регистрационная карточка&lt;br /&gt;
Файл:kelyje-2_cd.jpg|Диск&lt;br /&gt;
Файл:kelyje-2_inner_3.jpg|Задняя сторона обложки изнутри&lt;br /&gt;
Файл:kelyje-2_back_2.jpg|Задняя сторона обложки&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Другой вариант обложки'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:kelyje-2_cover.jpg|Обложка с рекламой магазинов Maxima&lt;br /&gt;
Файл:kelyje-2_back.jpg|Задняя сторона обложки с рекламой магазинов Maxima&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Фото третьего варианта'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:kelyje2cover.jpg|Фото Jewel-box с игрой&lt;br /&gt;
Файл:kelyje2back.jpg|&lt;br /&gt;
Файл:kelyje2cd.jpg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Оформление установщика и меню'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:lt-autorun.jpg|Меню автозапуска.&lt;br /&gt;
Файл:lt_setup.jpg|Фон установщика игры.&lt;br /&gt;
Файл:lt_mainmenu.png|Главное меню.&lt;br /&gt;
Файл:lt-newgame.jpg|Главное меню. Игра.&lt;br /&gt;
Файл:lt-networkgame.jpg|Главное меню. Сетевая игра.&lt;br /&gt;
Файл:lt-player.jpg|Главное меню. Сменить водителя.&lt;br /&gt;
Файл:lt-exitgame.jpg|Главное меню. Выход из игры.&lt;br /&gt;
Файл:lt-graphics.jpg|Главное меню. Графика.&lt;br /&gt;
Файл:lt-gamecontrols.jpg|Главное меню. Управление.&lt;br /&gt;
Файл:lt-videoplayer.jpg|Главное меню. Видеоплеер.&lt;br /&gt;
Файл:lt_loadpix.jpg|Загрузочный экран.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
'''Скриншоты с отличиями'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Файл:lt_ddphoto0006.jpg|Меню покупки автомобиля.&lt;br /&gt;
Файл:lt_ddphoto0015.jpg|Меню установки апгрейдов.&lt;br /&gt;
Файл:lt_ddphoto0011.jpg|Боковое меню.&lt;br /&gt;
Файл:lt_ddphoto0010.jpg|Обратите внимание - в литовской версии машины и вертолёт полиции имеют такой же окрас, как и в российской версии игры.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5520</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5520"/>
		<updated>2025-11-03T13:34:43Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Контейнер-переключатель (21) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура vertsStruct:&lt;br /&gt;
 //В блоке-хранилище вершин переменную vertsStructType следует читать как четыре uint8, тогда:&lt;br /&gt;
 int normals_type = vertsStructType[0]&lt;br /&gt;
 int num_UV       = vertsStructType[1]&lt;br /&gt;
 int some_data1   = vertsStructType[2]&lt;br /&gt;
 int some_data1   = vertsStructType[3]&lt;br /&gt;
 //&lt;br /&gt;
 struct vertsStruct{&lt;br /&gt;
     Vector3 position;&lt;br /&gt;
     Vector2 UV;&lt;br /&gt;
     Vector2 additionalUV[num_UV];&lt;br /&gt;
   &lt;br /&gt;
     if (normals_type == 1 || normals_type == 2){&lt;br /&gt;
         Vector3 normal; //обычная нормаль&lt;br /&gt;
     } else if (normals_type == 3){&lt;br /&gt;
         float normal;   //а в таком случае модель не будет затеняться&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Структура faceStruct:&lt;br /&gt;
 struct faceStruct{&lt;br /&gt;
   int   format;&lt;br /&gt;
   float num_1;&lt;br /&gt;
   int   num_32767;&lt;br /&gt;
   int   mtlIndex;&lt;br /&gt;
   int   indexCount;&lt;br /&gt;
   &amp;lt;faceIndex[indexCount] indexes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct faceIndex{&lt;br /&gt;
     int vertexIndex;&lt;br /&gt;
     if (inter_format &amp;amp; 2){&lt;br /&gt;
         Vector2 UV; //индивидуальная UV для данного полигона&lt;br /&gt;
     }&lt;br /&gt;
     if (inter_format &amp;amp; 0x10){&lt;br /&gt;
         if (inter_format &amp;amp; 0x1){&lt;br /&gt;
             Vector3 intensity_vector; //нормаль&lt;br /&gt;
         } else if (inter_format &amp;amp; 0x20){&lt;br /&gt;
             float intensity_float; //если есть, то затенение не будет использоваться&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 35 типов объектов (1 - 33, 41 и 42). К выходу «Дальнобойщиков 2» их количество было увеличено до 41.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  border;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Плоскость border задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09.&lt;br /&gt;
&lt;br /&gt;
Данный контейнер может:&lt;br /&gt;
# Использоваться в качестве ограничителя зоны отрисовки объекта (повсеместно применяется в &amp;quot;Дальнобойщиках 2&amp;quot; в контейнерах коллизии игрового мира). В таком случае отрисовка происходит относительно тангенса, перпендикулярного указанному вектору ''border''&amp;lt;ref&amp;gt;За информацию благодарность LabVaKars&amp;lt;/ref&amp;gt;.&lt;br /&gt;
# Задавать границы события. В таком случае границей события будет сумма всех ''border'' родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_type09_render_tree.jpg|Визуализация зон отрисовки коллизии дорог файла ap.b3d в программе Blender 3.6.23 при помощи плагинов от LabVaKars.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      paramsCount;&lt;br /&gt;
 &amp;lt;float[paramsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 15==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, структура аналогична блоку типа 16. Не встречается в файлах игры.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
У refer-блока количество дочерних блоков может быть меньше, чем у исходного контейнера. При этом, если индекс отображаемой группы в исходном контейнере выше, чем количество групп в refer-блоке, то refer-объект не будет отрисовываться. Данный факт удобно использовать при создании модификаций игры.&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 22==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int paramsCount;&lt;br /&gt;
 &amp;lt;float[paramsCount]&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 26==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
 Vector3  some_vector3;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct spriteData{&lt;br /&gt;
  int   format;&lt;br /&gt;
  float var1;&lt;br /&gt;
  int   num_32767;&lt;br /&gt;
  int   mtlIndex;&lt;br /&gt;
  int   vertsCount;&lt;br /&gt;
  &amp;lt;spriteVertex[vertsCount] verts&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct spriteVertex{&lt;br /&gt;
    Vector2 position;&lt;br /&gt;
    if (inter_format &amp;amp; 2){&lt;br /&gt;
      Vector2 UV;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт. Использует материал с текстурой формата TXR.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Набор спрайтов (31)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  spritePosition?; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.  Использует маску формата MSK, в отличие от типа 28. В Type31Data указаны разные варианты масок, в порядке возрастания разрешения текстуры. Судя по всему, переключение отображаемой маски происходит в зависимости от расстояния до наблюдателя.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер комнаты (41)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      paramsCount;&lt;br /&gt;
 &amp;lt;int[paramsCount] params&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё один вариант контейнера комнаты. Поддерживается игрой, но не используется ни в одном из файлов. Параметров может быть не более двух.&lt;br /&gt;
&lt;br /&gt;
= Приложения =&lt;br /&gt;
==Типы коллизий==&lt;br /&gt;
Параметры типов коллизий блоков 12 и 23.&lt;br /&gt;
&lt;br /&gt;
===Коэффициенты===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! коэффициент потери угловой скорости !! коэффициент потери линейной скорости !! коэффициент трения !! комментарии&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0,05 || 0,10 || 0,60 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1,50 || 0,20 || 0,55 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 3,00 || 0,30 || 0,30 ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0,60 || 0,30 || 0,30 ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0,05 || 0,10 || 0,45 ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 1,00 || 0,20 || 0,45 ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0,60 || 0,20 || 0,30 ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0,60 || 0,30 || 0,45 || уничтожает грузовик&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 1,00 || 0,40 || 0,20 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0,05 || 0,10 || 0,60 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 1,50 || 0,20 || 0,45 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 5,00 || 5,00 || 0,00 ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 5,00 || 5,00 || 0,00 || уничтожает шины&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Эффекты===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! следы от шин !! грязь при пробуксовке колёс !! цвет грязи !! пыль !! звук воды при движении&lt;br /&gt;
|-&lt;br /&gt;
| 1 || + ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 2 || + || + || чёрный ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 3 || + ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 4 ||  ||  ||  ||  || + &lt;br /&gt;
|-&lt;br /&gt;
| 5 || + ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 6 ||  || + || зелёный || + ||  &lt;br /&gt;
|-&lt;br /&gt;
| 7 ||  ||  ||  ||  || + &lt;br /&gt;
|-&lt;br /&gt;
| 8 ||  ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 9 ||  ||  ||  ||  || + &lt;br /&gt;
|-&lt;br /&gt;
| 10 ||  ||  ||  || + ||  &lt;br /&gt;
|-&lt;br /&gt;
| 11 ||  ||  ||  || + ||  &lt;br /&gt;
|-&lt;br /&gt;
| 12 ||  ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 13 ||  ||  ||  ||  ||  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Варианты переключателей типа 21==&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
===Объекты игрового мира===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| Faza8Key || Используется для анимаций&lt;br /&gt;
|-&lt;br /&gt;
| StartKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
===Повреждения автомобилей===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
===Переключатели светотехники===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие автомобильные переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| TestKey || 5 || Используется для отладки и хранит данные для отрисовки коллизий транспорта&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || 3 || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || 2 || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || 2 || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || 4 || Свечение сигнальных ламп радара&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
* На каждую вершину 3D-модели на данном слое UV-развёртки в блоке вершин может приходиться только одна пара UV-координат. Иными словами, недопускается, чтобы одна и та же вершина, используемая в разных треугольниках, имела разные UV-координаты. На каждый островок UV должен приходиться свой набор вершин. Впрочем, данное ограничение можно обойти, указывая индивидуальные координаты вершин каждого треугольника в блоке геометрии. Но в таком случае отражения (см. параметр &amp;quot;env&amp;quot; в [[RES_(формат_файлов)|RES]]) будут рассчитываться не для всей модели, а для каждого треугольника.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5519</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5519"/>
		<updated>2025-11-02T15:00:32Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура vertsStruct:&lt;br /&gt;
 //В блоке-хранилище вершин переменную vertsStructType следует читать как четыре uint8, тогда:&lt;br /&gt;
 int normals_type = vertsStructType[0]&lt;br /&gt;
 int num_UV       = vertsStructType[1]&lt;br /&gt;
 int some_data1   = vertsStructType[2]&lt;br /&gt;
 int some_data1   = vertsStructType[3]&lt;br /&gt;
 //&lt;br /&gt;
 struct vertsStruct{&lt;br /&gt;
     Vector3 position;&lt;br /&gt;
     Vector2 UV;&lt;br /&gt;
     Vector2 additionalUV[num_UV];&lt;br /&gt;
   &lt;br /&gt;
     if (normals_type == 1 || normals_type == 2){&lt;br /&gt;
         Vector3 normal; //обычная нормаль&lt;br /&gt;
     } else if (normals_type == 3){&lt;br /&gt;
         float normal;   //а в таком случае модель не будет затеняться&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Структура faceStruct:&lt;br /&gt;
 struct faceStruct{&lt;br /&gt;
   int   format;&lt;br /&gt;
   float num_1;&lt;br /&gt;
   int   num_32767;&lt;br /&gt;
   int   mtlIndex;&lt;br /&gt;
   int   indexCount;&lt;br /&gt;
   &amp;lt;faceIndex[indexCount] indexes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct faceIndex{&lt;br /&gt;
     int vertexIndex;&lt;br /&gt;
     if (inter_format &amp;amp; 2){&lt;br /&gt;
         Vector2 UV; //индивидуальная UV для данного полигона&lt;br /&gt;
     }&lt;br /&gt;
     if (inter_format &amp;amp; 0x10){&lt;br /&gt;
         if (inter_format &amp;amp; 0x1){&lt;br /&gt;
             Vector3 intensity_vector; //нормаль&lt;br /&gt;
         } else if (inter_format &amp;amp; 0x20){&lt;br /&gt;
             float intensity_float; //если есть, то затенение не будет использоваться&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 35 типов объектов (1 - 33, 41 и 42). К выходу «Дальнобойщиков 2» их количество было увеличено до 41.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  border;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Плоскость border задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09.&lt;br /&gt;
&lt;br /&gt;
Данный контейнер может:&lt;br /&gt;
# Использоваться в качестве ограничителя зоны отрисовки объекта (повсеместно применяется в &amp;quot;Дальнобойщиках 2&amp;quot; в контейнерах коллизии игрового мира). В таком случае отрисовка происходит относительно тангенса, перпендикулярного указанному вектору ''border''&amp;lt;ref&amp;gt;За информацию благодарность LabVaKars&amp;lt;/ref&amp;gt;.&lt;br /&gt;
# Задавать границы события. В таком случае границей события будет сумма всех ''border'' родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_type09_render_tree.jpg|Визуализация зон отрисовки коллизии дорог файла ap.b3d в программе Blender 3.6.23 при помощи плагинов от LabVaKars.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      paramsCount;&lt;br /&gt;
 &amp;lt;float[paramsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 15==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, структура аналогична блоку типа 16. Не встречается в файлах игры.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 22==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int paramsCount;&lt;br /&gt;
 &amp;lt;float[paramsCount]&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 26==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
 Vector3  some_vector3;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct spriteData{&lt;br /&gt;
  int   format;&lt;br /&gt;
  float var1;&lt;br /&gt;
  int   num_32767;&lt;br /&gt;
  int   mtlIndex;&lt;br /&gt;
  int   vertsCount;&lt;br /&gt;
  &amp;lt;spriteVertex[vertsCount] verts&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct spriteVertex{&lt;br /&gt;
    Vector2 position;&lt;br /&gt;
    if (inter_format &amp;amp; 2){&lt;br /&gt;
      Vector2 UV;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт. Использует материал с текстурой формата TXR.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Набор спрайтов (31)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  spritePosition?; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.  Использует маску формата MSK, в отличие от типа 28. В Type31Data указаны разные варианты масок, в порядке возрастания разрешения текстуры. Судя по всему, переключение отображаемой маски происходит в зависимости от расстояния до наблюдателя.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер комнаты (41)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      paramsCount;&lt;br /&gt;
 &amp;lt;int[paramsCount] params&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё один вариант контейнера комнаты. Поддерживается игрой, но не используется ни в одном из файлов. Параметров может быть не более двух.&lt;br /&gt;
&lt;br /&gt;
= Приложения =&lt;br /&gt;
==Типы коллизий==&lt;br /&gt;
Параметры типов коллизий блоков 12 и 23.&lt;br /&gt;
&lt;br /&gt;
===Коэффициенты===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! коэффициент потери угловой скорости !! коэффициент потери линейной скорости !! коэффициент трения !! комментарии&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0,05 || 0,10 || 0,60 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1,50 || 0,20 || 0,55 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 3,00 || 0,30 || 0,30 ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0,60 || 0,30 || 0,30 ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0,05 || 0,10 || 0,45 ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 1,00 || 0,20 || 0,45 ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0,60 || 0,20 || 0,30 ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0,60 || 0,30 || 0,45 || уничтожает грузовик&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 1,00 || 0,40 || 0,20 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0,05 || 0,10 || 0,60 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 1,50 || 0,20 || 0,45 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 5,00 || 5,00 || 0,00 ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 5,00 || 5,00 || 0,00 || уничтожает шины&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Эффекты===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! следы от шин !! грязь при пробуксовке колёс !! цвет грязи !! пыль !! звук воды при движении&lt;br /&gt;
|-&lt;br /&gt;
| 1 || + ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 2 || + || + || чёрный ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 3 || + ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 4 ||  ||  ||  ||  || + &lt;br /&gt;
|-&lt;br /&gt;
| 5 || + ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 6 ||  || + || зелёный || + ||  &lt;br /&gt;
|-&lt;br /&gt;
| 7 ||  ||  ||  ||  || + &lt;br /&gt;
|-&lt;br /&gt;
| 8 ||  ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 9 ||  ||  ||  ||  || + &lt;br /&gt;
|-&lt;br /&gt;
| 10 ||  ||  ||  || + ||  &lt;br /&gt;
|-&lt;br /&gt;
| 11 ||  ||  ||  || + ||  &lt;br /&gt;
|-&lt;br /&gt;
| 12 ||  ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 13 ||  ||  ||  ||  ||  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Варианты переключателей типа 21==&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
===Объекты игрового мира===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| Faza8Key || Используется для анимаций&lt;br /&gt;
|-&lt;br /&gt;
| StartKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
===Повреждения автомобилей===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
===Переключатели светотехники===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие автомобильные переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| TestKey || 5 || Используется для отладки и хранит данные для отрисовки коллизий транспорта&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || 3 || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || 2 || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || 2 || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || 4 || Свечение сигнальных ламп радара&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
* На каждую вершину 3D-модели на данном слое UV-развёртки в блоке вершин может приходиться только одна пара UV-координат. Иными словами, недопускается, чтобы одна и та же вершина, используемая в разных треугольниках, имела разные UV-координаты. На каждый островок UV должен приходиться свой набор вершин. Впрочем, данное ограничение можно обойти, указывая индивидуальные координаты вершин каждого треугольника в блоке геометрии. Но в таком случае отражения (см. параметр &amp;quot;env&amp;quot; в [[RES_(формат_файлов)|RES]]) будут рассчитываться не для всей модели, а для каждого треугольника.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5518</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5518"/>
		<updated>2025-11-02T14:37:55Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Геометрия коллизии (23) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура vertsStruct:&lt;br /&gt;
 //В блоке-хранилище вершин переменную vertsStructType следует читать как четыре uint8, тогда:&lt;br /&gt;
 int normals_type = vertsStructType[0]&lt;br /&gt;
 int num_UV       = vertsStructType[1]&lt;br /&gt;
 int some_data1   = vertsStructType[2]&lt;br /&gt;
 int some_data1   = vertsStructType[3]&lt;br /&gt;
 //&lt;br /&gt;
 struct vertsStruct{&lt;br /&gt;
     Vector3 position;&lt;br /&gt;
     Vector2 UV;&lt;br /&gt;
     Vector2 additionalUV[num_UV];&lt;br /&gt;
   &lt;br /&gt;
     if (normals_type == 1 || normals_type == 2){&lt;br /&gt;
         Vector3 normal; //обычная нормаль&lt;br /&gt;
     } else if (normals_type == 3){&lt;br /&gt;
         float normal;   //а в таком случае модель не будет затеняться&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Структура faceStruct:&lt;br /&gt;
 struct faceStruct{&lt;br /&gt;
   int   format;&lt;br /&gt;
   float num_1;&lt;br /&gt;
   int   num_32767;&lt;br /&gt;
   int   mtlIndex;&lt;br /&gt;
   int   indexCount;&lt;br /&gt;
   &amp;lt;faceIndex[indexCount] indexes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct faceIndex{&lt;br /&gt;
     int vertexIndex;&lt;br /&gt;
     if (inter_format &amp;amp; 2){&lt;br /&gt;
         Vector2 UV; //индивидуальная UV для данного полигона&lt;br /&gt;
     }&lt;br /&gt;
     if (inter_format &amp;amp; 0x10){&lt;br /&gt;
         if (inter_format &amp;amp; 0x1){&lt;br /&gt;
             Vector3 intensity_vector; //нормаль&lt;br /&gt;
         } else if (inter_format &amp;amp; 0x20){&lt;br /&gt;
             float intensity_float; //если есть, то затенение не будет использоваться&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 35 типов объектов (1 - 33, 41 и 42). К выходу «Дальнобойщиков 2» их количество было увеличено до 41.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  border;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Плоскость border задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09.&lt;br /&gt;
&lt;br /&gt;
Данный контейнер может:&lt;br /&gt;
# Использоваться в качестве ограничителя зоны отрисовки объекта (повсеместно применяется в &amp;quot;Дальнобойщиках 2&amp;quot; в контейнерах коллизии игрового мира). В таком случае отрисовка происходит относительно тангенса, перпендикулярного указанному вектору ''border''&amp;lt;ref&amp;gt;За информацию благодарность LabVaKars&amp;lt;/ref&amp;gt;.&lt;br /&gt;
# Задавать границы события. В таком случае границей события будет сумма всех ''border'' родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_type09_render_tree.jpg|Визуализация зон отрисовки коллизии дорог файла ap.b3d в программе Blender 3.6.23 при помощи плагинов от LabVaKars.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      paramsCount;&lt;br /&gt;
 &amp;lt;float[paramsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 15==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, структура аналогична блоку типа 16. Не встречается в файлах игры.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 22==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int paramsCount;&lt;br /&gt;
 &amp;lt;float[paramsCount]&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 26==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
 Vector3  some_vector3;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct spriteData{&lt;br /&gt;
  int   format;&lt;br /&gt;
  float var1;&lt;br /&gt;
  int   num_32767;&lt;br /&gt;
  int   mtlIndex;&lt;br /&gt;
  int   vertsCount;&lt;br /&gt;
  &amp;lt;spriteVertex[vertsCount] verts&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct spriteVertex{&lt;br /&gt;
    Vector2 position;&lt;br /&gt;
    if (inter_format &amp;amp; 2){&lt;br /&gt;
      Vector2 UV;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт. Использует материал с текстурой формата TXR.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Набор спрайтов (31)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  spritePosition?; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.  Использует маску формата MSK, в отличие от типа 28. В Type31Data указаны разные варианты масок, в порядке возрастания разрешения текстуры. Судя по всему, переключение отображаемой маски происходит в зависимости от расстояния до наблюдателя.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер комнаты (41)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      paramsCount;&lt;br /&gt;
 &amp;lt;int[paramsCount] params&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё один вариант контейнера комнаты. Поддерживается игрой, но не используется ни в одном из файлов. Параметров может быть не более двух.&lt;br /&gt;
&lt;br /&gt;
= Приложения =&lt;br /&gt;
==Типы коллизий==&lt;br /&gt;
Параметры типов коллизий блоков 12 и 23.&lt;br /&gt;
&lt;br /&gt;
===Коэффициенты===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! коэффициент потери угловой скорости !! коэффициент потери линейной скорости !! коэффициент трения !! комментарии&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0,05 || 0,10 || 0,60 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1,50 || 0,20 || 0,55 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 3,00 || 0,30 || 0,30 ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0,60 || 0,30 || 0,30 ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0,05 || 0,10 || 0,45 ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 1,00 || 0,20 || 0,45 ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0,60 || 0,20 || 0,30 ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0,60 || 0,30 || 0,45 || уничтожает грузовик&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 1,00 || 0,40 || 0,20 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0,05 || 0,10 || 0,60 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 1,50 || 0,20 || 0,45 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 5,00 || 5,00 || 0,00 ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 5,00 || 5,00 || 0,00 || уничтожает шины&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Эффекты===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! следы от шин !! грязь при пробуксовке колёс !! цвет грязи !! пыль !! звук воды при движении&lt;br /&gt;
|-&lt;br /&gt;
| 1 || + ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 2 || + || + || чёрный ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 3 || + ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 4 ||  ||  ||  ||  || + &lt;br /&gt;
|-&lt;br /&gt;
| 5 || + ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 6 ||  || + || зелёный || + ||  &lt;br /&gt;
|-&lt;br /&gt;
| 7 ||  ||  ||  ||  || + &lt;br /&gt;
|-&lt;br /&gt;
| 8 ||  ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 9 ||  ||  ||  ||  || + &lt;br /&gt;
|-&lt;br /&gt;
| 10 ||  ||  ||  || + ||  &lt;br /&gt;
|-&lt;br /&gt;
| 11 ||  ||  ||  || + ||  &lt;br /&gt;
|-&lt;br /&gt;
| 12 ||  ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 13 ||  ||  ||  ||  ||  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
* На каждую вершину 3D-модели на данном слое UV-развёртки в блоке вершин может приходиться только одна пара UV-координат. Иными словами, недопускается, чтобы одна и та же вершина, используемая в разных треугольниках, имела разные UV-координаты. На каждый островок UV должен приходиться свой набор вершин. Впрочем, данное ограничение можно обойти, указывая индивидуальные координаты вершин каждого треугольника в блоке геометрии. Но в таком случае отражения (см. параметр &amp;quot;env&amp;quot; в [[RES_(формат_файлов)|RES]]) будут рассчитываться не для всей модели, а для каждого треугольника.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5517</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5517"/>
		<updated>2025-11-02T14:37:16Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: типы коллизий&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура vertsStruct:&lt;br /&gt;
 //В блоке-хранилище вершин переменную vertsStructType следует читать как четыре uint8, тогда:&lt;br /&gt;
 int normals_type = vertsStructType[0]&lt;br /&gt;
 int num_UV       = vertsStructType[1]&lt;br /&gt;
 int some_data1   = vertsStructType[2]&lt;br /&gt;
 int some_data1   = vertsStructType[3]&lt;br /&gt;
 //&lt;br /&gt;
 struct vertsStruct{&lt;br /&gt;
     Vector3 position;&lt;br /&gt;
     Vector2 UV;&lt;br /&gt;
     Vector2 additionalUV[num_UV];&lt;br /&gt;
   &lt;br /&gt;
     if (normals_type == 1 || normals_type == 2){&lt;br /&gt;
         Vector3 normal; //обычная нормаль&lt;br /&gt;
     } else if (normals_type == 3){&lt;br /&gt;
         float normal;   //а в таком случае модель не будет затеняться&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Структура faceStruct:&lt;br /&gt;
 struct faceStruct{&lt;br /&gt;
   int   format;&lt;br /&gt;
   float num_1;&lt;br /&gt;
   int   num_32767;&lt;br /&gt;
   int   mtlIndex;&lt;br /&gt;
   int   indexCount;&lt;br /&gt;
   &amp;lt;faceIndex[indexCount] indexes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct faceIndex{&lt;br /&gt;
     int vertexIndex;&lt;br /&gt;
     if (inter_format &amp;amp; 2){&lt;br /&gt;
         Vector2 UV; //индивидуальная UV для данного полигона&lt;br /&gt;
     }&lt;br /&gt;
     if (inter_format &amp;amp; 0x10){&lt;br /&gt;
         if (inter_format &amp;amp; 0x1){&lt;br /&gt;
             Vector3 intensity_vector; //нормаль&lt;br /&gt;
         } else if (inter_format &amp;amp; 0x20){&lt;br /&gt;
             float intensity_float; //если есть, то затенение не будет использоваться&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 35 типов объектов (1 - 33, 41 и 42). К выходу «Дальнобойщиков 2» их количество было увеличено до 41.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  border;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Плоскость border задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09.&lt;br /&gt;
&lt;br /&gt;
Данный контейнер может:&lt;br /&gt;
# Использоваться в качестве ограничителя зоны отрисовки объекта (повсеместно применяется в &amp;quot;Дальнобойщиках 2&amp;quot; в контейнерах коллизии игрового мира). В таком случае отрисовка происходит относительно тангенса, перпендикулярного указанному вектору ''border''&amp;lt;ref&amp;gt;За информацию благодарность LabVaKars&amp;lt;/ref&amp;gt;.&lt;br /&gt;
# Задавать границы события. В таком случае границей события будет сумма всех ''border'' родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_type09_render_tree.jpg|Визуализация зон отрисовки коллизии дорог файла ap.b3d в программе Blender 3.6.23 при помощи плагинов от LabVaKars.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      paramsCount;&lt;br /&gt;
 &amp;lt;float[paramsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 15==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, структура аналогична блоку типа 16. Не встречается в файлах игры.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 22==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int dataCount;&lt;br /&gt;
 &amp;lt;float[dataCount] someData&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 26==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
 Vector3  some_vector3;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct spriteData{&lt;br /&gt;
  int   format;&lt;br /&gt;
  float var1;&lt;br /&gt;
  int   num_32767;&lt;br /&gt;
  int   mtlIndex;&lt;br /&gt;
  int   vertsCount;&lt;br /&gt;
  &amp;lt;spriteVertex[vertsCount] verts&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct spriteVertex{&lt;br /&gt;
    Vector2 position;&lt;br /&gt;
    if (inter_format &amp;amp; 2){&lt;br /&gt;
      Vector2 UV;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт. Использует материал с текстурой формата TXR.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Набор спрайтов (31)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  spritePosition?; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.  Использует маску формата MSK, в отличие от типа 28. В Type31Data указаны разные варианты масок, в порядке возрастания разрешения текстуры. Судя по всему, переключение отображаемой маски происходит в зависимости от расстояния до наблюдателя.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер комнаты (41)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      paramsCount;&lt;br /&gt;
 &amp;lt;int[paramsCount] params&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё один вариант контейнера комнаты. Поддерживается игрой, но не используется ни в одном из файлов. Параметров может быть не более двух.&lt;br /&gt;
&lt;br /&gt;
= Приложения =&lt;br /&gt;
==Типы коллизий==&lt;br /&gt;
Параметры типов коллизий блоков 12 и 23.&lt;br /&gt;
&lt;br /&gt;
===Коэффициенты===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! коэффициент потери угловой скорости !! коэффициент потери линейной скорости !! коэффициент трения !! комментарии&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0,05 || 0,10 || 0,60 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1,50 || 0,20 || 0,55 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 3,00 || 0,30 || 0,30 ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0,60 || 0,30 || 0,30 ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0,05 || 0,10 || 0,45 ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 1,00 || 0,20 || 0,45 ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0,60 || 0,20 || 0,30 ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0,60 || 0,30 || 0,45 || уничтожает грузовик&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 1,00 || 0,40 || 0,20 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0,05 || 0,10 || 0,60 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 1,50 || 0,20 || 0,45 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 5,00 || 5,00 || 0,00 ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 5,00 || 5,00 || 0,00 || уничтожает шины&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Эффекты===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! следы от шин !! грязь при пробуксовке колёс !! цвет грязи !! пыль !! звук воды при движении&lt;br /&gt;
|-&lt;br /&gt;
| 1 || + ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 2 || + || + || чёрный ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 3 || + ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 4 ||  ||  ||  ||  || + &lt;br /&gt;
|-&lt;br /&gt;
| 5 || + ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 6 ||  || + || зелёный || + ||  &lt;br /&gt;
|-&lt;br /&gt;
| 7 ||  ||  ||  ||  || + &lt;br /&gt;
|-&lt;br /&gt;
| 8 ||  ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 9 ||  ||  ||  ||  || + &lt;br /&gt;
|-&lt;br /&gt;
| 10 ||  ||  ||  || + ||  &lt;br /&gt;
|-&lt;br /&gt;
| 11 ||  ||  ||  || + ||  &lt;br /&gt;
|-&lt;br /&gt;
| 12 ||  ||  ||  ||  ||  &lt;br /&gt;
|-&lt;br /&gt;
| 13 ||  ||  ||  ||  ||  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
* На каждую вершину 3D-модели на данном слое UV-развёртки в блоке вершин может приходиться только одна пара UV-координат. Иными словами, недопускается, чтобы одна и та же вершина, используемая в разных треугольниках, имела разные UV-координаты. На каждый островок UV должен приходиться свой набор вершин. Впрочем, данное ограничение можно обойти, указывая индивидуальные координаты вершин каждого треугольника в блоке геометрии. Но в таком случае отражения (см. параметр &amp;quot;env&amp;quot; в [[RES_(формат_файлов)|RES]]) будут рассчитываться не для всей модели, а для каждого треугольника.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5516</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5516"/>
		<updated>2025-11-02T14:35:12Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Плоскость коллизии (12) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура vertsStruct:&lt;br /&gt;
 //В блоке-хранилище вершин переменную vertsStructType следует читать как четыре uint8, тогда:&lt;br /&gt;
 int normals_type = vertsStructType[0]&lt;br /&gt;
 int num_UV       = vertsStructType[1]&lt;br /&gt;
 int some_data1   = vertsStructType[2]&lt;br /&gt;
 int some_data1   = vertsStructType[3]&lt;br /&gt;
 //&lt;br /&gt;
 struct vertsStruct{&lt;br /&gt;
     Vector3 position;&lt;br /&gt;
     Vector2 UV;&lt;br /&gt;
     Vector2 additionalUV[num_UV];&lt;br /&gt;
   &lt;br /&gt;
     if (normals_type == 1 || normals_type == 2){&lt;br /&gt;
         Vector3 normal; //обычная нормаль&lt;br /&gt;
     } else if (normals_type == 3){&lt;br /&gt;
         float normal;   //а в таком случае модель не будет затеняться&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Структура faceStruct:&lt;br /&gt;
 struct faceStruct{&lt;br /&gt;
   int   format;&lt;br /&gt;
   float num_1;&lt;br /&gt;
   int   num_32767;&lt;br /&gt;
   int   mtlIndex;&lt;br /&gt;
   int   indexCount;&lt;br /&gt;
   &amp;lt;faceIndex[indexCount] indexes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct faceIndex{&lt;br /&gt;
     int vertexIndex;&lt;br /&gt;
     if (inter_format &amp;amp; 2){&lt;br /&gt;
         Vector2 UV; //индивидуальная UV для данного полигона&lt;br /&gt;
     }&lt;br /&gt;
     if (inter_format &amp;amp; 0x10){&lt;br /&gt;
         if (inter_format &amp;amp; 0x1){&lt;br /&gt;
             Vector3 intensity_vector; //нормаль&lt;br /&gt;
         } else if (inter_format &amp;amp; 0x20){&lt;br /&gt;
             float intensity_float; //если есть, то затенение не будет использоваться&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 35 типов объектов (1 - 33, 41 и 42). К выходу «Дальнобойщиков 2» их количество было увеличено до 41.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  border;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Плоскость border задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09.&lt;br /&gt;
&lt;br /&gt;
Данный контейнер может:&lt;br /&gt;
# Использоваться в качестве ограничителя зоны отрисовки объекта (повсеместно применяется в &amp;quot;Дальнобойщиках 2&amp;quot; в контейнерах коллизии игрового мира). В таком случае отрисовка происходит относительно тангенса, перпендикулярного указанному вектору ''border''&amp;lt;ref&amp;gt;За информацию благодарность LabVaKars&amp;lt;/ref&amp;gt;.&lt;br /&gt;
# Задавать границы события. В таком случае границей события будет сумма всех ''border'' родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_type09_render_tree.jpg|Визуализация зон отрисовки коллизии дорог файла ap.b3d в программе Blender 3.6.23 при помощи плагинов от LabVaKars.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      paramsCount;&lt;br /&gt;
 &amp;lt;float[paramsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 15==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, структура аналогична блоку типа 16. Не встречается в файлах игры.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 22==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int dataCount;&lt;br /&gt;
 &amp;lt;float[dataCount] someData&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 26==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
 Vector3  some_vector3;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct spriteData{&lt;br /&gt;
  int   format;&lt;br /&gt;
  float var1;&lt;br /&gt;
  int   num_32767;&lt;br /&gt;
  int   mtlIndex;&lt;br /&gt;
  int   vertsCount;&lt;br /&gt;
  &amp;lt;spriteVertex[vertsCount] verts&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct spriteVertex{&lt;br /&gt;
    Vector2 position;&lt;br /&gt;
    if (inter_format &amp;amp; 2){&lt;br /&gt;
      Vector2 UV;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт. Использует материал с текстурой формата TXR.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Набор спрайтов (31)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  spritePosition?; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.  Использует маску формата MSK, в отличие от типа 28. В Type31Data указаны разные варианты масок, в порядке возрастания разрешения текстуры. Судя по всему, переключение отображаемой маски происходит в зависимости от расстояния до наблюдателя.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер комнаты (41)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      paramsCount;&lt;br /&gt;
 &amp;lt;int[paramsCount] params&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё один вариант контейнера комнаты. Поддерживается игрой, но не используется ни в одном из файлов. Параметров может быть не более двух.&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
* На каждую вершину 3D-модели на данном слое UV-развёртки в блоке вершин может приходиться только одна пара UV-координат. Иными словами, недопускается, чтобы одна и та же вершина, используемая в разных треугольниках, имела разные UV-координаты. На каждый островок UV должен приходиться свой набор вершин. Впрочем, данное ограничение можно обойти, указывая индивидуальные координаты вершин каждого треугольника в блоке геометрии. Но в таком случае отражения (см. параметр &amp;quot;env&amp;quot; в [[RES_(формат_файлов)|RES]]) будут рассчитываться не для всей модели, а для каждого треугольника.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=Sch-%D1%84%D0%B0%D0%B9%D0%BB%D1%8B&amp;diff=5515</id>
		<title>Sch-файлы</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=Sch-%D1%84%D0%B0%D0%B9%D0%BB%D1%8B&amp;diff=5515"/>
		<updated>2025-10-26T22:00:43Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* etrashboxes.sch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Страница с кратким описанием sch-файлов.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Инструменты для дешифрации и шифрации доступны на странице с [[Утилиты_(Дальнобойщики_2) | утилитами]]. Игра может использовать как зашифрованные, так и расшифрованные файлы. Единственное условие - файл должен иметь расширение sch/cnf, txt читаться не будет. &amp;lt;br&amp;gt;&lt;br /&gt;
Расшифрованные sch для [[История_версий_(Дальнобойщики_2)#Дальнобойщики 2 Издание второе, дополненное | дополненного издания игры]] доступны [https://yadi.sk/d/3V2J6YkS8ltomg здесь].&lt;br /&gt;
&lt;br /&gt;
==etrashboxes.sch==&lt;br /&gt;
Файл с данными о припаркованных автомобилях.&lt;br /&gt;
Имеет следующий вид:&lt;br /&gt;
  ( vehicle  идентификатор &amp;quot;идентификатор из tech-файла&amp;quot;  номер_окраса  тип )&lt;br /&gt;
&lt;br /&gt;
Идентификатор может быть любым. &amp;lt;/br&amp;gt;&lt;br /&gt;
Типы: &lt;br /&gt;
* parked - припаркованный автомобиль;&lt;br /&gt;
* container - контейнер SuperCargo;&lt;br /&gt;
* fuel - бочка с топливом на продажу;&lt;br /&gt;
* roadwork - объект, устанавливаемый в точке проведения дорожных работ (по умолчанию - каток).&lt;br /&gt;
Примеры:&lt;br /&gt;
  ( vehicle  PARKED_X  &amp;quot;PVan&amp;quot;  3  parked )&lt;br /&gt;
  ( vehicle  CONTAINER_X  &amp;quot;AnmObj0231&amp;quot;  0  container )&lt;br /&gt;
  ( vehicle  FUEL_X  &amp;quot;AnmObj0241&amp;quot;  0  fuel )&lt;br /&gt;
  ( vehicle  KATOK  &amp;quot;Katok&amp;quot;  0  roadwork )&lt;br /&gt;
&lt;br /&gt;
==evehicles.sch==&lt;br /&gt;
Файл данных автомобилей.&lt;br /&gt;
Имеет следующий вид:&lt;br /&gt;
  ( vehicle  идентификатор_в_vd_sch  &amp;quot;car_node&amp;quot;  номер_окраса  тип_автомобиля  тип_владельца  цена  отображаемая_мощность&amp;lt;ref&amp;gt;Только для визуального отображения при покупке. Не обязательно должна соответствовать реальной из tech-файла.&amp;lt;/ref&amp;gt; (идентификаторы_совместимых_полуприцепов) флаг )&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
* vehicle - начало строки параметров, одинаковое для каждого типа автомобиля;&lt;br /&gt;
* идентификатор_в_vd_sch - ID используемой подписи автомобиля из vd.sch;&lt;br /&gt;
* car_node - имя параметра car_node используемого автомобиля из vehicle.tech&lt;br /&gt;
&lt;br /&gt;
Типы автомобилей (определяет доступный ассортимент грузов для данной машины):&lt;br /&gt;
* car - легковой автомобиль;&lt;br /&gt;
* lorry - грузовой автомобиль;&lt;br /&gt;
* tractor - тягач;&lt;br /&gt;
* semitrailer - полуприцеп.&lt;br /&gt;
Типы владельцев автомобиля:&lt;br /&gt;
* dumb - автомобиль будет использоваться только ai-трафиком; для покупки будет доступен только после захвата 51% рынка;&lt;br /&gt;
* trucker - автомобиль будет использоваться наёмными водителями; для покупки доступен с начала игры;&lt;br /&gt;
* police - автомобиль будет использоваться игровой милицией;&lt;br /&gt;
* mafia - автомобиль будет использоваться игровыми бандитами;&lt;br /&gt;
* none - автомобиль не будет никем использоваться в игре, при этом на нём можно будет начать игру, прописав его в файле game.cnf.&lt;br /&gt;
Флаг: если указано 1, то транспортное средство сможет получать груз только на '''[[База#Нефтебаза|нефтебазах]]'''.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
  ( vehicle  FIAT_1  &amp;quot;Fiat&amp;quot;  0  car  dumb  32000  408 ())&lt;br /&gt;
  ( vehicle  DAF_TRACTOR1  &amp;quot;Daf&amp;quot;  0  tractor  trucker  76200  355 ( SEMITRAILER1  SEMITRAILER2 ))&lt;br /&gt;
  ( vehicle  SEMITANK4  &amp;quot;STrailerT&amp;quot;  3  semitrailer  none  0  101 () 1 )&lt;br /&gt;
&lt;br /&gt;
==merchandise.sch==&lt;br /&gt;
Файл с данными обо всех товарах, доступных в игре.&lt;br /&gt;
Имеет следующий вид:&lt;br /&gt;
  ( идентификатор  тип  масса  объем&lt;br /&gt;
    ( неизвестное_1  неизвестное_2 неизвестное_3&lt;br /&gt;
      ( топливо тип_транспорта легальность_груза нужен_мафии ) неизвестное_4) прочность неизвестное_5  &amp;quot;Название&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Параметр !! Значения/тип данных !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| идентификатор&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Уникальный идентификатор || Уникальное внутреннее обозначение груза. По этому имени на груз ссылаются другие файлы игры&lt;br /&gt;
|-&lt;br /&gt;
| тип&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || CRATE&amp;lt;br&amp;gt;CRATE20&amp;lt;br&amp;gt;CRATE16&amp;lt;br&amp;gt;PACK&amp;lt;br&amp;gt;KILO&amp;lt;br&amp;gt;UNIT&amp;lt;br&amp;gt;BARREL&amp;lt;br&amp;gt;PIECE&amp;lt;br&amp;gt;BOX&amp;lt;br&amp;gt;TON&lt;br /&gt;
 || Обозначает вид единицы груза (ящик, бочка, упаковка, штука). Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| масса&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число || Масса единицы груза, кг&lt;br /&gt;
|-&lt;br /&gt;
| объем&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число || Объем единицы груза, м&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;При помощи параметров массы и объема можно рассчитать, какие масса и объем груза помещаются в машину:&lt;br /&gt;
 &lt;br /&gt;
   k = масса / объем   &lt;br /&gt;
   s = T&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; / V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
   При k &amp;lt;= s:&lt;br /&gt;
      V = V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; * l&lt;br /&gt;
      T = V * k&lt;br /&gt;
  &lt;br /&gt;
   При k &amp;gt; s:&lt;br /&gt;
      T = T&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; * l&lt;br /&gt;
      V = T / k&lt;br /&gt;
   &lt;br /&gt;
   Где:&lt;br /&gt;
   k - плотность груза (вес на м&amp;lt;sup&amp;gt;3)&amp;lt;/sup&amp;gt;, кг/м&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&lt;br /&gt;
   s - индекс грузоподъемности машины&amp;lt;ref&amp;gt;Индекс грузоподъмности машины равен отношению грузоподъемности к объему кузова. Если плотность груза больше индекса грузоподъемности, такой груз считается тяжелым. Степень загрузки машины для тяжелых грузов исходит из грузоподъемности. Если же плотность груза меньше индекса, такой груз считается габаритным. Степень загрузки машины для габаритных грузов исходит из объема кузова.&amp;lt;/ref&amp;gt;, кг/м&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&lt;br /&gt;
   T&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; - грузоподъемность машины, кг&lt;br /&gt;
   V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; - объем кузова машины, м&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&lt;br /&gt;
   l - лимит погрузки&amp;lt;ref&amp;gt;Лимит погрузки - фактическая погружаемая масса/объем груза от возможной. По какой-то причине базы всегда загружают машину не более чем на 85% от максимальной вместительности.&amp;lt;/ref&amp;gt;, % (на базах всегда 0,85)&lt;br /&gt;
   T - масса погрузки, кг&lt;br /&gt;
   V - объем погрузки, м&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| неизвестное_1&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число || Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| неизвестное_2&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число|| Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| неизвестное_3&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число || Копирует значение параметра прочности, за исключением нелегальных и некоторых других грузов. Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| топливо || fuel || Присутствует только в одноименном грузе. Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| тип_транспорта&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || trucks&amp;lt;br&amp;gt;cars || Тип транспорта, который может перевозить данный груз - грузовики или легковые автомобили. Для грузов, которые могут перевозить и те, и другие, существуют записи-дубликаты с разными значениями этого параметра&lt;br /&gt;
|-&lt;br /&gt;
| легальность_груза || illegal || Присутствие параметра указывает, что груз нелегален&lt;br /&gt;
|-&lt;br /&gt;
| нужен_мафии || formafia || Присутствие параметра указывает, что за грузом охотится мафия&lt;br /&gt;
|-&lt;br /&gt;
| неизвестное_4|| Число || Параметр присутствует только у нелегальных грузов. Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| прочность&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число || Из прочности рассчитывается хрупкость груза:&lt;br /&gt;
   F = (1 - прочность) * 100&lt;br /&gt;
|-&lt;br /&gt;
| неизвестное_5&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число || Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| название&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Строка || Название груза, отображаемое в игре&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; - параметры со звездочкой обязательны (присутствуют у всех грузов в игре).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
  ( BREAD  CRATE  25  0.1 &lt;br /&gt;
    ( 25  70  0.85 &lt;br /&gt;
      ( trucks )) 0.85  71  &amp;quot;Хлеб&amp;quot; ) — обычный груз для грузовика&lt;br /&gt;
&lt;br /&gt;
 ( HEROINE  KILO  1  0.0003 &lt;br /&gt;
    ( 1500  441.465  0.4 &lt;br /&gt;
      ( trucks  illegal  formafia ) 1.3 ) 1  70  &amp;quot;Героин&amp;quot; ) — нелегальный груз для грузовика, за которым охотится мафия&lt;br /&gt;
&lt;br /&gt;
 ( C_JEWELRY  BOX  100  0.1 &lt;br /&gt;
    ( 0  220000  0.5 &lt;br /&gt;
      ( cars  formafia )) 0.6  0  &amp;quot;Юв. изделия&amp;quot; ) — груз для легкового автомобиля, за которым охотится мафия&lt;br /&gt;
&lt;br /&gt;
==ms.sch==&lt;br /&gt;
Файл локализации сообщений пейджера. Вид записи такой же, как и в vd.sch:&lt;br /&gt;
  ( NEED_A_PETROL_SEMITRAILER  .  &amp;quot;ДЛЯ ПЕРЕВОЗКИ ТОПЛИВА ВАМ НУЖНА АВТОЦИСТЕРНА&amp;quot; )&lt;br /&gt;
  ( LOAD_AT_AN_OIL_TANK  .  &amp;quot;В АВТОЦИСТЕРНУ МОЖНО ТОЛЬКО ЗАЛИВАТЬ ТОПЛИВО У ГАЗГОЛЬДЕРА&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
==names.sch==&lt;br /&gt;
Файл с именами водителей. &amp;lt;br /&amp;gt;&lt;br /&gt;
Пример записи файла:&lt;br /&gt;
  ( &amp;quot;COP1&amp;quot;  male  police  1  0 )&lt;br /&gt;
  ( &amp;quot;HOOD1&amp;quot;  male  mafia  1 )&lt;br /&gt;
  ( &amp;quot;ВИТАЛИЙ&amp;quot;  male  trucker  1 )&lt;br /&gt;
&lt;br /&gt;
У милиции после номера записан флаг, показывающий возможность получения взятки. При 0 - принятие взяток невозможно, при 1 - возможно.&lt;br /&gt;
&lt;br /&gt;
==restable.sch==&lt;br /&gt;
Предположительно, название происходит от англ. &amp;quot;'''res'''ource '''table'''&amp;quot; - таблица ресурсов.&lt;br /&gt;
Файл содержит цены и описание (на английском языке) усовершенствований транспорта на СТО.&lt;br /&gt;
&lt;br /&gt;
Имеет следующий вид: &lt;br /&gt;
  ( идентификатор             ( &amp;quot;имя стандартного объекта&amp;quot; нулевая цена ) ( &amp;quot;имя улучшенного объекта&amp;quot; цена усовершенствования )   )&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
  ( PR_FORCED_ENGINE             ( &amp;quot;Regular engine&amp;quot; 0 ) ( &amp;quot;Forced engine&amp;quot; 12500 )   )&lt;br /&gt;
&lt;br /&gt;
==vd.sch==&lt;br /&gt;
Файл локализации названий игрового транспорта.&lt;br /&gt;
ID имеют следующий вид:&lt;br /&gt;
  ( идентификатор  .  &amp;quot;название_автомобиля&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
  ( FIAT_1  .  &amp;quot;Фиат&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
==SCH-файлы из папки ENV==&lt;br /&gt;
&lt;br /&gt;
Файлы со свойствами участков игрового мира, всего их 36 — от mod_aa.sch до mod_dq.sch. &lt;br /&gt;
Содержат настройки объектов, находящихся на данных участках:&lt;br /&gt;
*Ассортимент грузов на базах (идентификаторы груза взяты из merchandise.sch)&lt;br /&gt;
*Ассортимент апгрейдов на СТО (идентификаторы апгрейдов взяты из restable.sch)&lt;br /&gt;
*Сообщения, присылаемые на пейджер при въезде в населенный пункт&lt;br /&gt;
*Объявления о ремонтных работах на участках&lt;br /&gt;
*Расположение места стоянок автомобилей милиции и мафии на обочине&lt;br /&gt;
&lt;br /&gt;
Пример (фрагменты файла mod_bd.sch):&lt;br /&gt;
  ( nodeevent  BASE08NORTH  UNCONDITIONAL  &amp;quot;store_08_north&amp;quot;  NORTH  &amp;quot;БАЗА БУХТА НАПРАВО, ЧЕРЕЗ 100 М&amp;quot; ) — сообщение о прибытии на базу&lt;br /&gt;
 &lt;br /&gt;
      ( PR_FORCED_ENGINE  1 )&lt;br /&gt;
      ( PR_OIL_ADDITIVE  1 )&lt;br /&gt;
      ( PR_ABS  1 )&lt;br /&gt;
      ( PR_ADJUSTABLE_SUSPENSION  1 )&lt;br /&gt;
      ( PR_BRAKES  1 )&lt;br /&gt;
      ( PR_ENGINE_BRAKE  1 )&lt;br /&gt;
      ( PR_REINFORCED_CHASSIS  1 )&lt;br /&gt;
      ( PR_BULETPROOF_GLASS  1 )&lt;br /&gt;
      ( PR_NAVIGATOR  1 )&lt;br /&gt;
      ( PR_TIRES  3 )                                                                                    — ассортимент апгрейдов&lt;br /&gt;
      ( PR_CARGO_SCANNER  1 )&lt;br /&gt;
      ( PR_HORN  1 )&lt;br /&gt;
      ( PR_FIRE_PROTECTION  1 )&lt;br /&gt;
      ( PR_EXTRA_TANK  1 )&lt;br /&gt;
      ( PR_ANTI_RADAR  1 )&lt;br /&gt;
      ( PR_STEALTH_BODY_PAINT  1 )&lt;br /&gt;
      ( PR_HEADLIGHT_PROTECTION  1 )&lt;br /&gt;
      ( PR_AIR_FILTER_SNORKEL  1 )))&lt;br /&gt;
 &lt;br /&gt;
      ( CHAMPAGNE  0 )&lt;br /&gt;
      ( FRESHFISH  0 )&lt;br /&gt;
      ( SALTEDFISH  0 )&lt;br /&gt;
      ( SHOES  0 )&lt;br /&gt;
      ( AUTOPARTS  0 )&lt;br /&gt;
      ( VIDEOCAMERA  0 )&lt;br /&gt;
      ( PENTIUM_III  0 )&lt;br /&gt;
      ( COMPUTER_GAMES  0 )                                                                                — ассортимент грузов&lt;br /&gt;
      ( C_CHAMPAGNE  0 )&lt;br /&gt;
      ( C_SHOES  0 )&lt;br /&gt;
      ( C_VIDEOCAMERA  0 )&lt;br /&gt;
      ( C_CAMERA  0 )&lt;br /&gt;
      ( C_COMPUTER_GAMES  0 )&lt;br /&gt;
      ( C_POSTAGE_STAMPS  0 )&lt;br /&gt;
      ( C_WAGES  0 )&lt;br /&gt;
      ( C_MAIL  0 ))&lt;br /&gt;
 &lt;br /&gt;
  ( obstacle  OBST_BD_1  REGULAR  &amp;quot;bd&amp;quot;  &amp;quot;CLOSE_BD_L&amp;quot;  &amp;quot;&amp;quot;  &amp;quot;&amp;quot;  &amp;quot;МОСТ НА ТРАССЕ БУХТА-НИЖНЕГОРСК НА РЕМОНТЕ&amp;quot;  &amp;quot;МОСТ НА ТРАССЕ БУХТА-НИЖНЕГОРСК ВОССТАНОВЛЕН&amp;quot; &lt;br /&gt;
    ( &amp;quot;pos_work_bd1&amp;quot; ))&lt;br /&gt;
  ( obstacle  OBST_BD_2  REGULAR  &amp;quot;bd&amp;quot;  &amp;quot;CLOSE_BD_R&amp;quot;  &amp;quot;&amp;quot;  &amp;quot;&amp;quot;  &amp;quot;МОСТ НА ТРАССЕ БУХТА-НИЖНЕГОРСК НА РЕМОНТЕ&amp;quot;  &amp;quot;МОСТ НА ТРАССЕ БУХТА-НИЖНЕГОРСК ВОССТАНОВЛЕН&amp;quot; &lt;br /&gt;
    ( &amp;quot;pos_work_bd0&amp;quot; )) — сообщения о ремонте&lt;br /&gt;
&lt;br /&gt;
===Нумерация населенных пунктов===&lt;br /&gt;
Населенным пунктам присвоены следующие числовые обозначения:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Населенный пункт !! Номер !! Файл *.b3d&lt;br /&gt;
|-&lt;br /&gt;
| Приозёрск || 0 || aj&lt;br /&gt;
|-&lt;br /&gt;
| Залесск || 1 || ar&lt;br /&gt;
|-&lt;br /&gt;
| Ельнино || 2 || au&lt;br /&gt;
|-&lt;br /&gt;
| Южный || 3 || ap&lt;br /&gt;
|-&lt;br /&gt;
| Ключи || 4 || bc&lt;br /&gt;
|-&lt;br /&gt;
| Шахты || 5 || am&lt;br /&gt;
|-&lt;br /&gt;
| Боровое || 6 || ad&lt;br /&gt;
|-&lt;br /&gt;
| Нижнегорск || 7 || cb&lt;br /&gt;
|-&lt;br /&gt;
| Бухта || 8 || bd&lt;br /&gt;
|-&lt;br /&gt;
| Горный || 9 || dc&lt;br /&gt;
|-&lt;br /&gt;
| Алмазный || 10 || aa&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Парковки===&lt;br /&gt;
  ( parking  MARKET_G  &amp;quot;??&amp;quot;  6 ()&lt;br /&gt;
    (&lt;br /&gt;
      ( node  &amp;quot;node_car_0603&amp;quot; )&lt;br /&gt;
      ( node  &amp;quot;node_car_0604&amp;quot; )&lt;br /&gt;
      ( node  &amp;quot;node_car_0605&amp;quot; )&lt;br /&gt;
      ( node  &amp;quot;node_car_0608&amp;quot;  4  &amp;quot;Южный&amp;quot; )&lt;br /&gt;
    )&lt;br /&gt;
  8 - число автомобилей, доступных для заказа из данной точки&lt;br /&gt;
  )&lt;br /&gt;
  &lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=Sch-%D1%84%D0%B0%D0%B9%D0%BB%D1%8B&amp;diff=5514</id>
		<title>Sch-файлы</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=Sch-%D1%84%D0%B0%D0%B9%D0%BB%D1%8B&amp;diff=5514"/>
		<updated>2025-10-26T21:50:29Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* etrashboxes.sch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Страница с кратким описанием sch-файлов.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Инструменты для дешифрации и шифрации доступны на странице с [[Утилиты_(Дальнобойщики_2) | утилитами]]. Игра может использовать как зашифрованные, так и расшифрованные файлы. Единственное условие - файл должен иметь расширение sch/cnf, txt читаться не будет. &amp;lt;br&amp;gt;&lt;br /&gt;
Расшифрованные sch для [[История_версий_(Дальнобойщики_2)#Дальнобойщики 2 Издание второе, дополненное | дополненного издания игры]] доступны [https://yadi.sk/d/3V2J6YkS8ltomg здесь].&lt;br /&gt;
&lt;br /&gt;
==etrashboxes.sch==&lt;br /&gt;
Файл с данными о припаркованных автомобилях.&lt;br /&gt;
Имеет следующий вид:&lt;br /&gt;
  ( vehicle  идентификатор &amp;quot;идентификатор из tech-файла&amp;quot;  номер_окраса  тип )&lt;br /&gt;
&lt;br /&gt;
Идентификатор может быть любым. &amp;lt;\br&amp;gt;&lt;br /&gt;
Типы: &lt;br /&gt;
* parked - припаркованный автомобиль;&lt;br /&gt;
* container - контейнер SuperCargo;&lt;br /&gt;
* fuel - бочка с топливом на продажу;&lt;br /&gt;
* roadwork - объект, устанавливаемый в точке проведения дорожных работ (по умолчанию - каток).&lt;br /&gt;
Примеры:&lt;br /&gt;
  ( vehicle  PARKED_X  &amp;quot;PVan&amp;quot;  3  parked )&lt;br /&gt;
  ( vehicle  CONTAINER_X  &amp;quot;AnmObj0231&amp;quot;  0  container )&lt;br /&gt;
  ( vehicle  FUEL_X  &amp;quot;AnmObj0241&amp;quot;  0  fuel )&lt;br /&gt;
  ( vehicle  KATOK  &amp;quot;Katok&amp;quot;  0  roadwork )&lt;br /&gt;
&lt;br /&gt;
==evehicles.sch==&lt;br /&gt;
Файл данных автомобилей.&lt;br /&gt;
Имеет следующий вид:&lt;br /&gt;
  ( vehicle  идентификатор_в_vd_sch  &amp;quot;car_node&amp;quot;  номер_окраса  тип_автомобиля  тип_владельца  цена  отображаемая_мощность&amp;lt;ref&amp;gt;Только для визуального отображения при покупке. Не обязательно должна соответствовать реальной из tech-файла.&amp;lt;/ref&amp;gt; (идентификаторы_совместимых_полуприцепов) флаг )&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
* vehicle - начало строки параметров, одинаковое для каждого типа автомобиля;&lt;br /&gt;
* идентификатор_в_vd_sch - ID используемой подписи автомобиля из vd.sch;&lt;br /&gt;
* car_node - имя параметра car_node используемого автомобиля из vehicle.tech&lt;br /&gt;
&lt;br /&gt;
Типы автомобилей (определяет доступный ассортимент грузов для данной машины):&lt;br /&gt;
* car - легковой автомобиль;&lt;br /&gt;
* lorry - грузовой автомобиль;&lt;br /&gt;
* tractor - тягач;&lt;br /&gt;
* semitrailer - полуприцеп.&lt;br /&gt;
Типы владельцев автомобиля:&lt;br /&gt;
* dumb - автомобиль будет использоваться только ai-трафиком; для покупки будет доступен только после захвата 51% рынка;&lt;br /&gt;
* trucker - автомобиль будет использоваться наёмными водителями; для покупки доступен с начала игры;&lt;br /&gt;
* police - автомобиль будет использоваться игровой милицией;&lt;br /&gt;
* mafia - автомобиль будет использоваться игровыми бандитами;&lt;br /&gt;
* none - автомобиль не будет никем использоваться в игре, при этом на нём можно будет начать игру, прописав его в файле game.cnf.&lt;br /&gt;
Флаг: если указано 1, то транспортное средство сможет получать груз только на '''[[База#Нефтебаза|нефтебазах]]'''.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
  ( vehicle  FIAT_1  &amp;quot;Fiat&amp;quot;  0  car  dumb  32000  408 ())&lt;br /&gt;
  ( vehicle  DAF_TRACTOR1  &amp;quot;Daf&amp;quot;  0  tractor  trucker  76200  355 ( SEMITRAILER1  SEMITRAILER2 ))&lt;br /&gt;
  ( vehicle  SEMITANK4  &amp;quot;STrailerT&amp;quot;  3  semitrailer  none  0  101 () 1 )&lt;br /&gt;
&lt;br /&gt;
==merchandise.sch==&lt;br /&gt;
Файл с данными обо всех товарах, доступных в игре.&lt;br /&gt;
Имеет следующий вид:&lt;br /&gt;
  ( идентификатор  тип  масса  объем&lt;br /&gt;
    ( неизвестное_1  неизвестное_2 неизвестное_3&lt;br /&gt;
      ( топливо тип_транспорта легальность_груза нужен_мафии ) неизвестное_4) прочность неизвестное_5  &amp;quot;Название&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Параметр !! Значения/тип данных !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| идентификатор&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Уникальный идентификатор || Уникальное внутреннее обозначение груза. По этому имени на груз ссылаются другие файлы игры&lt;br /&gt;
|-&lt;br /&gt;
| тип&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || CRATE&amp;lt;br&amp;gt;CRATE20&amp;lt;br&amp;gt;CRATE16&amp;lt;br&amp;gt;PACK&amp;lt;br&amp;gt;KILO&amp;lt;br&amp;gt;UNIT&amp;lt;br&amp;gt;BARREL&amp;lt;br&amp;gt;PIECE&amp;lt;br&amp;gt;BOX&amp;lt;br&amp;gt;TON&lt;br /&gt;
 || Обозначает вид единицы груза (ящик, бочка, упаковка, штука). Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| масса&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число || Масса единицы груза, кг&lt;br /&gt;
|-&lt;br /&gt;
| объем&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число || Объем единицы груза, м&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;При помощи параметров массы и объема можно рассчитать, какие масса и объем груза помещаются в машину:&lt;br /&gt;
 &lt;br /&gt;
   k = масса / объем   &lt;br /&gt;
   s = T&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; / V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
   При k &amp;lt;= s:&lt;br /&gt;
      V = V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; * l&lt;br /&gt;
      T = V * k&lt;br /&gt;
  &lt;br /&gt;
   При k &amp;gt; s:&lt;br /&gt;
      T = T&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; * l&lt;br /&gt;
      V = T / k&lt;br /&gt;
   &lt;br /&gt;
   Где:&lt;br /&gt;
   k - плотность груза (вес на м&amp;lt;sup&amp;gt;3)&amp;lt;/sup&amp;gt;, кг/м&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&lt;br /&gt;
   s - индекс грузоподъемности машины&amp;lt;ref&amp;gt;Индекс грузоподъмности машины равен отношению грузоподъемности к объему кузова. Если плотность груза больше индекса грузоподъемности, такой груз считается тяжелым. Степень загрузки машины для тяжелых грузов исходит из грузоподъемности. Если же плотность груза меньше индекса, такой груз считается габаритным. Степень загрузки машины для габаритных грузов исходит из объема кузова.&amp;lt;/ref&amp;gt;, кг/м&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&lt;br /&gt;
   T&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; - грузоподъемность машины, кг&lt;br /&gt;
   V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; - объем кузова машины, м&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&lt;br /&gt;
   l - лимит погрузки&amp;lt;ref&amp;gt;Лимит погрузки - фактическая погружаемая масса/объем груза от возможной. По какой-то причине базы всегда загружают машину не более чем на 85% от максимальной вместительности.&amp;lt;/ref&amp;gt;, % (на базах всегда 0,85)&lt;br /&gt;
   T - масса погрузки, кг&lt;br /&gt;
   V - объем погрузки, м&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| неизвестное_1&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число || Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| неизвестное_2&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число|| Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| неизвестное_3&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число || Копирует значение параметра прочности, за исключением нелегальных и некоторых других грузов. Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| топливо || fuel || Присутствует только в одноименном грузе. Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| тип_транспорта&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || trucks&amp;lt;br&amp;gt;cars || Тип транспорта, который может перевозить данный груз - грузовики или легковые автомобили. Для грузов, которые могут перевозить и те, и другие, существуют записи-дубликаты с разными значениями этого параметра&lt;br /&gt;
|-&lt;br /&gt;
| легальность_груза || illegal || Присутствие параметра указывает, что груз нелегален&lt;br /&gt;
|-&lt;br /&gt;
| нужен_мафии || formafia || Присутствие параметра указывает, что за грузом охотится мафия&lt;br /&gt;
|-&lt;br /&gt;
| неизвестное_4|| Число || Параметр присутствует только у нелегальных грузов. Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| прочность&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число || Из прочности рассчитывается хрупкость груза:&lt;br /&gt;
   F = (1 - прочность) * 100&lt;br /&gt;
|-&lt;br /&gt;
| неизвестное_5&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число || Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| название&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Строка || Название груза, отображаемое в игре&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; - параметры со звездочкой обязательны (присутствуют у всех грузов в игре).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
  ( BREAD  CRATE  25  0.1 &lt;br /&gt;
    ( 25  70  0.85 &lt;br /&gt;
      ( trucks )) 0.85  71  &amp;quot;Хлеб&amp;quot; ) — обычный груз для грузовика&lt;br /&gt;
&lt;br /&gt;
 ( HEROINE  KILO  1  0.0003 &lt;br /&gt;
    ( 1500  441.465  0.4 &lt;br /&gt;
      ( trucks  illegal  formafia ) 1.3 ) 1  70  &amp;quot;Героин&amp;quot; ) — нелегальный груз для грузовика, за которым охотится мафия&lt;br /&gt;
&lt;br /&gt;
 ( C_JEWELRY  BOX  100  0.1 &lt;br /&gt;
    ( 0  220000  0.5 &lt;br /&gt;
      ( cars  formafia )) 0.6  0  &amp;quot;Юв. изделия&amp;quot; ) — груз для легкового автомобиля, за которым охотится мафия&lt;br /&gt;
&lt;br /&gt;
==ms.sch==&lt;br /&gt;
Файл локализации сообщений пейджера. Вид записи такой же, как и в vd.sch:&lt;br /&gt;
  ( NEED_A_PETROL_SEMITRAILER  .  &amp;quot;ДЛЯ ПЕРЕВОЗКИ ТОПЛИВА ВАМ НУЖНА АВТОЦИСТЕРНА&amp;quot; )&lt;br /&gt;
  ( LOAD_AT_AN_OIL_TANK  .  &amp;quot;В АВТОЦИСТЕРНУ МОЖНО ТОЛЬКО ЗАЛИВАТЬ ТОПЛИВО У ГАЗГОЛЬДЕРА&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
==names.sch==&lt;br /&gt;
Файл с именами водителей. &amp;lt;br /&amp;gt;&lt;br /&gt;
Пример записи файла:&lt;br /&gt;
  ( &amp;quot;COP1&amp;quot;  male  police  1  0 )&lt;br /&gt;
  ( &amp;quot;HOOD1&amp;quot;  male  mafia  1 )&lt;br /&gt;
  ( &amp;quot;ВИТАЛИЙ&amp;quot;  male  trucker  1 )&lt;br /&gt;
&lt;br /&gt;
У милиции после номера записан флаг, показывающий возможность получения взятки. При 0 - принятие взяток невозможно, при 1 - возможно.&lt;br /&gt;
&lt;br /&gt;
==restable.sch==&lt;br /&gt;
Предположительно, название происходит от англ. &amp;quot;'''res'''ource '''table'''&amp;quot; - таблица ресурсов.&lt;br /&gt;
Файл содержит цены и описание (на английском языке) усовершенствований транспорта на СТО.&lt;br /&gt;
&lt;br /&gt;
Имеет следующий вид: &lt;br /&gt;
  ( идентификатор             ( &amp;quot;имя стандартного объекта&amp;quot; нулевая цена ) ( &amp;quot;имя улучшенного объекта&amp;quot; цена усовершенствования )   )&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
  ( PR_FORCED_ENGINE             ( &amp;quot;Regular engine&amp;quot; 0 ) ( &amp;quot;Forced engine&amp;quot; 12500 )   )&lt;br /&gt;
&lt;br /&gt;
==vd.sch==&lt;br /&gt;
Файл локализации названий игрового транспорта.&lt;br /&gt;
ID имеют следующий вид:&lt;br /&gt;
  ( идентификатор  .  &amp;quot;название_автомобиля&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
  ( FIAT_1  .  &amp;quot;Фиат&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
==SCH-файлы из папки ENV==&lt;br /&gt;
&lt;br /&gt;
Файлы со свойствами участков игрового мира, всего их 36 — от mod_aa.sch до mod_dq.sch. &lt;br /&gt;
Содержат настройки объектов, находящихся на данных участках:&lt;br /&gt;
*Ассортимент грузов на базах (идентификаторы груза взяты из merchandise.sch)&lt;br /&gt;
*Ассортимент апгрейдов на СТО (идентификаторы апгрейдов взяты из restable.sch)&lt;br /&gt;
*Сообщения, присылаемые на пейджер при въезде в населенный пункт&lt;br /&gt;
*Объявления о ремонтных работах на участках&lt;br /&gt;
*Расположение места стоянок автомобилей милиции и мафии на обочине&lt;br /&gt;
&lt;br /&gt;
Пример (фрагменты файла mod_bd.sch):&lt;br /&gt;
  ( nodeevent  BASE08NORTH  UNCONDITIONAL  &amp;quot;store_08_north&amp;quot;  NORTH  &amp;quot;БАЗА БУХТА НАПРАВО, ЧЕРЕЗ 100 М&amp;quot; ) — сообщение о прибытии на базу&lt;br /&gt;
 &lt;br /&gt;
      ( PR_FORCED_ENGINE  1 )&lt;br /&gt;
      ( PR_OIL_ADDITIVE  1 )&lt;br /&gt;
      ( PR_ABS  1 )&lt;br /&gt;
      ( PR_ADJUSTABLE_SUSPENSION  1 )&lt;br /&gt;
      ( PR_BRAKES  1 )&lt;br /&gt;
      ( PR_ENGINE_BRAKE  1 )&lt;br /&gt;
      ( PR_REINFORCED_CHASSIS  1 )&lt;br /&gt;
      ( PR_BULETPROOF_GLASS  1 )&lt;br /&gt;
      ( PR_NAVIGATOR  1 )&lt;br /&gt;
      ( PR_TIRES  3 )                                                                                    — ассортимент апгрейдов&lt;br /&gt;
      ( PR_CARGO_SCANNER  1 )&lt;br /&gt;
      ( PR_HORN  1 )&lt;br /&gt;
      ( PR_FIRE_PROTECTION  1 )&lt;br /&gt;
      ( PR_EXTRA_TANK  1 )&lt;br /&gt;
      ( PR_ANTI_RADAR  1 )&lt;br /&gt;
      ( PR_STEALTH_BODY_PAINT  1 )&lt;br /&gt;
      ( PR_HEADLIGHT_PROTECTION  1 )&lt;br /&gt;
      ( PR_AIR_FILTER_SNORKEL  1 )))&lt;br /&gt;
 &lt;br /&gt;
      ( CHAMPAGNE  0 )&lt;br /&gt;
      ( FRESHFISH  0 )&lt;br /&gt;
      ( SALTEDFISH  0 )&lt;br /&gt;
      ( SHOES  0 )&lt;br /&gt;
      ( AUTOPARTS  0 )&lt;br /&gt;
      ( VIDEOCAMERA  0 )&lt;br /&gt;
      ( PENTIUM_III  0 )&lt;br /&gt;
      ( COMPUTER_GAMES  0 )                                                                                — ассортимент грузов&lt;br /&gt;
      ( C_CHAMPAGNE  0 )&lt;br /&gt;
      ( C_SHOES  0 )&lt;br /&gt;
      ( C_VIDEOCAMERA  0 )&lt;br /&gt;
      ( C_CAMERA  0 )&lt;br /&gt;
      ( C_COMPUTER_GAMES  0 )&lt;br /&gt;
      ( C_POSTAGE_STAMPS  0 )&lt;br /&gt;
      ( C_WAGES  0 )&lt;br /&gt;
      ( C_MAIL  0 ))&lt;br /&gt;
 &lt;br /&gt;
  ( obstacle  OBST_BD_1  REGULAR  &amp;quot;bd&amp;quot;  &amp;quot;CLOSE_BD_L&amp;quot;  &amp;quot;&amp;quot;  &amp;quot;&amp;quot;  &amp;quot;МОСТ НА ТРАССЕ БУХТА-НИЖНЕГОРСК НА РЕМОНТЕ&amp;quot;  &amp;quot;МОСТ НА ТРАССЕ БУХТА-НИЖНЕГОРСК ВОССТАНОВЛЕН&amp;quot; &lt;br /&gt;
    ( &amp;quot;pos_work_bd1&amp;quot; ))&lt;br /&gt;
  ( obstacle  OBST_BD_2  REGULAR  &amp;quot;bd&amp;quot;  &amp;quot;CLOSE_BD_R&amp;quot;  &amp;quot;&amp;quot;  &amp;quot;&amp;quot;  &amp;quot;МОСТ НА ТРАССЕ БУХТА-НИЖНЕГОРСК НА РЕМОНТЕ&amp;quot;  &amp;quot;МОСТ НА ТРАССЕ БУХТА-НИЖНЕГОРСК ВОССТАНОВЛЕН&amp;quot; &lt;br /&gt;
    ( &amp;quot;pos_work_bd0&amp;quot; )) — сообщения о ремонте&lt;br /&gt;
&lt;br /&gt;
===Нумерация населенных пунктов===&lt;br /&gt;
Населенным пунктам присвоены следующие числовые обозначения:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Населенный пункт !! Номер !! Файл *.b3d&lt;br /&gt;
|-&lt;br /&gt;
| Приозёрск || 0 || aj&lt;br /&gt;
|-&lt;br /&gt;
| Залесск || 1 || ar&lt;br /&gt;
|-&lt;br /&gt;
| Ельнино || 2 || au&lt;br /&gt;
|-&lt;br /&gt;
| Южный || 3 || ap&lt;br /&gt;
|-&lt;br /&gt;
| Ключи || 4 || bc&lt;br /&gt;
|-&lt;br /&gt;
| Шахты || 5 || am&lt;br /&gt;
|-&lt;br /&gt;
| Боровое || 6 || ad&lt;br /&gt;
|-&lt;br /&gt;
| Нижнегорск || 7 || cb&lt;br /&gt;
|-&lt;br /&gt;
| Бухта || 8 || bd&lt;br /&gt;
|-&lt;br /&gt;
| Горный || 9 || dc&lt;br /&gt;
|-&lt;br /&gt;
| Алмазный || 10 || aa&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Парковки===&lt;br /&gt;
  ( parking  MARKET_G  &amp;quot;??&amp;quot;  6 ()&lt;br /&gt;
    (&lt;br /&gt;
      ( node  &amp;quot;node_car_0603&amp;quot; )&lt;br /&gt;
      ( node  &amp;quot;node_car_0604&amp;quot; )&lt;br /&gt;
      ( node  &amp;quot;node_car_0605&amp;quot; )&lt;br /&gt;
      ( node  &amp;quot;node_car_0608&amp;quot;  4  &amp;quot;Южный&amp;quot; )&lt;br /&gt;
    )&lt;br /&gt;
  8 - число автомобилей, доступных для заказа из данной точки&lt;br /&gt;
  )&lt;br /&gt;
  &lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=Vehicle.tech&amp;diff=5513</id>
		<title>Vehicle.tech</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=Vehicle.tech&amp;diff=5513"/>
		<updated>2025-10-26T21:00:58Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг_(Дальнобойщики_2)]]&lt;br /&gt;
[[Категория:Транспортные_средства_(Дальнобойщики_2)]]&lt;br /&gt;
'''vehicle.tech''' - файл, отвечающий за различные характеристики автомобилей в [[Дальнобойщики_2|Дальнобойщиках 2]].&lt;br /&gt;
== Как и чем редактировать vehicle.tech? ==&lt;br /&gt;
Существует несколько вариантов редактирования данного файла:&amp;lt;br&amp;gt;&lt;br /&gt;
# С помощью утилиты '''D2 Tech Editor'''. Автор программы -  Алексей Воронов ([[Участник:BoPoH|BoPoH]]). Скачать можно [[Утилиты (Дальнобойщики 2)|со страницы с утилитами]].&amp;lt;br /&amp;gt;&lt;br /&gt;
# Через HEX-редактор. Скачать hsl-структуры для версий 6.6 и 7.2 можно [https://vk.com/wall-11599748_44108?reply=47612 здесь], для версии 8.0 - [https://vk.com/topic-157113673_39349010?post=128 тут].&lt;br /&gt;
# Наконец, '''наиболее правильный способ''' - собрать файл из исходных текстовых файлов. Инструкция и ссылка на загрузку доступны [https://vk.com/page-157113673_53558294 здесь].&lt;br /&gt;
== Переменные и их значения ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название переменной||Значение &lt;br /&gt;
|-&lt;br /&gt;
|CenterMassInB3D||Центр масс.&lt;br /&gt;
|-&lt;br /&gt;
|mass||Масса автомобиля. &amp;lt;ref&amp;gt; Также отвечает за звук двигателя. Бензиновый двигатель = 0-3000, дизель = 3000 и выше. &amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|rwheel||Расстояние между дорогой и нижним концом пружины.&lt;br /&gt;
|-&lt;br /&gt;
|rwheel1||Толщина колеса.&lt;br /&gt;
|-&lt;br /&gt;
|tank||Объём топливного бака. &amp;lt;ref&amp;gt; Если изменить только значение объёма бака, то на дальность хода грузовика это никак не повлияет. Дело в том, что мгновенный расход топлива вычисляется в относительных единицах, а не в литрах. Т. е. используется отношение долей (процентов или промилле) от полного объёма бака к количеству совершённых оборотов коленвала.&lt;br /&gt;
&lt;br /&gt;
Чтобы в этом убедиться, достаточно установить крошечный объём бака (н-р, всего 1 л) и замерить дальность хода. Она окажется такой же, как и при 100 л, и при 1000 л.&lt;br /&gt;
&lt;br /&gt;
Чтобы дальность хода увеличивалась пропорционально увеличению объёма бака, необходимо увеличивать и значение переменной &amp;quot;fuelTimeEndurance&amp;quot;. [https://vk.com/wall-11599748_51210?reply=51217 Источник] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|fuelTimeEndurance||Относительная топливная эффективность. &amp;lt;ref&amp;gt; Данная переменная отражает относительную топливную эффективность, т. е. это некий коэффициент, указывающий насколько медленнее будет расходоваться единичный объём топлива (соответствующий объёму бака) по сравнению с некоторым эталонным двигателем, для которого значение данной переменной равно 1. [https://vk.com/wall-11599748_51210?reply=51241 Источник]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|fuelConsumption||Расход топлива (количество литров на 10 км).&lt;br /&gt;
|-&lt;br /&gt;
|kilometrage||неизвестно&lt;br /&gt;
|-&lt;br /&gt;
|air_press_coeff||Давление воздуха.&lt;br /&gt;
|-&lt;br /&gt;
|air_resist_coeff||Сопротивление воздуха.&lt;br /&gt;
|-&lt;br /&gt;
|air_side_resist_coeff||Боковое сопротивление воздуха. &amp;lt;ref&amp;gt;Также влияет на блокировку вращения прицепа относительно тягача. &amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|front_wheel_thickness||Ширина передних колёс.&lt;br /&gt;
|-&lt;br /&gt;
|rear_wheel_thickness||Ширина задних колёс.&lt;br /&gt;
|-&lt;br /&gt;
|maxrotmomentum||Максимальный крутящий момент.&lt;br /&gt;
|-&lt;br /&gt;
|breakpower||Сила торможения.&lt;br /&gt;
|-&lt;br /&gt;
|rear_axle_coeff||Передаточное число редуктора.&lt;br /&gt;
|-&lt;br /&gt;
|reverse_trans_coeff0||Передаточное число передачи заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
|gear_trans_coeff1..13||Передаточные числа передач с первой по тринадцатую.&lt;br /&gt;
|-&lt;br /&gt;
|tach_with_max_power||Обороты максимального крутящего момента. Также определяют максимальные обороты двигателя вообще, примерно равные 3 * tach_with_max_power&lt;br /&gt;
|-&lt;br /&gt;
|cargo_and_body_pick_load||Грузоподъёмность.&lt;br /&gt;
|-&lt;br /&gt;
|body_mass||Масса фургона.&lt;br /&gt;
|-&lt;br /&gt;
|body_height||Высота фургона.&lt;br /&gt;
|-&lt;br /&gt;
|body_square||Объём фургона.&lt;br /&gt;
|-&lt;br /&gt;
|center_of_cargo_bottom||Позиция груза в кузове автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
|driving_wheels||Колёсная формула.&lt;br /&gt;
|-&lt;br /&gt;
|sterring_wheels||Поворотные колёса.&lt;br /&gt;
|-&lt;br /&gt;
|touching_road_wheels||Показывает, какие колёса соприкасаются с поверхностью.&lt;br /&gt;
|-&lt;br /&gt;
|OV||Координаты салона.&lt;br /&gt;
|-&lt;br /&gt;
|tangViewer||Наклон камеры из салона.&lt;br /&gt;
|-&lt;br /&gt;
|I||Момент инерции.&lt;br /&gt;
|-&lt;br /&gt;
|suspension||Подвеска автомобиля. &amp;lt;ref&amp;gt;Первые 4 параметра - минимальная высота, остальные 4 - максимальная. Вообще, подвеска в tech-файле представлена в виде восьми параметров: hmin0, hmin1, hmin2, hmin3 и hmax0, hmax1, hmax2, hmax3 (см. файл carv.ini из [[Автомобильные_гонки|Car Races Demo]]). &amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ks||Коэффициент жесткости пружин.&lt;br /&gt;
|-&lt;br /&gt;
|Cs||Коэффициент амортизаторов.&lt;br /&gt;
|-&lt;br /&gt;
|CollisionRadius||Радиус коллизии автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
|CollisionCenter||Центр коллизии автомобиля (вместе с предыдущим параметром, по всей видимости, используется для позиционирования создаваемого дорожного трафика).&lt;br /&gt;
|-&lt;br /&gt;
|rubber_collision_coeff||Коэффициент коллизии колёс.&lt;br /&gt;
|-&lt;br /&gt;
|slide_collision_coeff||Коэффициент бокового трения.&lt;br /&gt;
|-&lt;br /&gt;
|Corner_Mark_1..11||Точки коллизии для расчёта столкновений со статичными объектами (игровым миром). Обычно совпадает с коллизией, определённой объектами CollisionPlane.&lt;br /&gt;
|-&lt;br /&gt;
|AddColPnts0...3||Нижние точки крайних передних и крайних задних колёс, автоматические определяемые игрой при сборке tech-файла.&lt;br /&gt;
|-&lt;br /&gt;
|Corner_Mark_W1...4||Нижние габаритные точки коллизии автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
|CollisionPlane0...16||Плоскости коллизии для расчёта столкновений с динамическими объектами (другой транспорт, бочки). Первые три числа - нормальный вектор, задающий направление, четвёртый параметр - удаление плоскости от начала координат (0, 0, 0). Каждая плоскость перпендикулярна точке (0, 0, 0). Границы пересечений данных плоскостей образуют коллизию автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
|tvCameraPosition1||Позиция левого зеркала.&lt;br /&gt;
|-&lt;br /&gt;
|tvCameraPosition2||Позиция центрального зеркала.&lt;br /&gt;
|-&lt;br /&gt;
|tvCameraPosition3||Позиция правого зеркала.&lt;br /&gt;
|-&lt;br /&gt;
|tvCameraPosition4||неизвестно&lt;br /&gt;
|-&lt;br /&gt;
|tvCameraRightConer||неизвестно&lt;br /&gt;
|-&lt;br /&gt;
|SmokePosition||Позиция выхлопа.&lt;br /&gt;
|-&lt;br /&gt;
|SmokeDirection||Направление выхлопа.&lt;br /&gt;
|-&lt;br /&gt;
|SmokePosition2||Позиция второго выхлопа.&lt;br /&gt;
|-&lt;br /&gt;
|SmokeDirection2||Направление второго выхлопа.&lt;br /&gt;
|-&lt;br /&gt;
|flame_place||Позиция огня горящего двигателя.&lt;br /&gt;
|-&lt;br /&gt;
|Fara_FL||Координаты свечения левой фары.&lt;br /&gt;
|-&lt;br /&gt;
|Fara_FR||Координаты свечения правой фары.&lt;br /&gt;
|-&lt;br /&gt;
|Fara_BLs||Координаты свечения заднего левого фонаря.&lt;br /&gt;
|-&lt;br /&gt;
|Fara_BRs||Координаты свечения заднего правого фонаря.&lt;br /&gt;
|-&lt;br /&gt;
|Fara_BL||Координаты свечения левого огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
|Fara_BR||Координаты свечения правого огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
|horse_power||Мощность двигателя.&lt;br /&gt;
|-&lt;br /&gt;
|price||Цена автомобиля (указанная здесь не используется, задаётся в [[Sch-файлы#evehicles.sch|evehicles.sch]]).&lt;br /&gt;
|-&lt;br /&gt;
|glowwing||неизвестно&lt;br /&gt;
|-&lt;br /&gt;
|lowSaddle||Координаты сцепки на тягаче для соединения с полуприцепом.&lt;br /&gt;
|-&lt;br /&gt;
|topSaddle||Координаты сцепки на полуприцепе для соединения с тягачом.&lt;br /&gt;
|-&lt;br /&gt;
|Towhook||Координаты сцепки на грузовике для соединения с прицепом (в игре не используется).&lt;br /&gt;
|-&lt;br /&gt;
|Coupler||Координаты сцепки на прицепе для соединения с грузовиком.&lt;br /&gt;
|-&lt;br /&gt;
|shiftSaddle||Смещение точки сцепки по оси Y относительно параметра lowSaddle.&lt;br /&gt;
|-&lt;br /&gt;
|CouplerLength||Вероятно, аналогично предыдущему, но относительно параметра Towhook.&lt;br /&gt;
|-&lt;br /&gt;
|SpeedScale||Первое число - максимальное значение скорости на шкале спидометра, второе - максимальный угол поворота стрелки спидометра.&lt;br /&gt;
|-&lt;br /&gt;
|TachScale||Аналогично SpeedScale.&lt;br /&gt;
|-&lt;br /&gt;
|FuelScale||Аналогично TachScale.&lt;br /&gt;
|-&lt;br /&gt;
|CabRWindow||неизвестно &lt;br /&gt;
|-&lt;br /&gt;
|CabLWindow||неизвестно &lt;br /&gt;
|-&lt;br /&gt;
|CabFrontWindow||неизвестно &lt;br /&gt;
|-&lt;br /&gt;
|Drivers_neck_Angles||Ограничения поворота камеры в салоне по осям (мин. Z, мин. Y, мин. X, 0, макс. X, макс. Y, макс. Z).&lt;br /&gt;
|-&lt;br /&gt;
|cockpit_space||Имя локатора кабины в trucks.b3d (&amp;lt;автомобиль&amp;gt;BoothSpace). Данный локатор используется для имитации качения кабины.&lt;br /&gt;
|-&lt;br /&gt;
|prefix||Префикс объектов автомобиля в trucks.b3d (локаторы и фары).&lt;br /&gt;
|-&lt;br /&gt;
|prefixCab||Префикс используемой кабины из cabines.b3d.&lt;br /&gt;
|-&lt;br /&gt;
|car_node||Имя блока автомобиля в trucks.b3d. Также на данный параметр ссылаются данные из evehicles.sch&lt;br /&gt;
|-&lt;br /&gt;
|trailer_type||Тип полуприцепа: 1 - стандартный, 2 - платформа, 3 - цистерна.&lt;br /&gt;
|-&lt;br /&gt;
|Fara_Dir||неизвестно&lt;br /&gt;
|-&lt;br /&gt;
|Fara_Width||неизвестно&lt;br /&gt;
|}&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
==Примечания==&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=Sch-%D1%84%D0%B0%D0%B9%D0%BB%D1%8B&amp;diff=5512</id>
		<title>Sch-файлы</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=Sch-%D1%84%D0%B0%D0%B9%D0%BB%D1%8B&amp;diff=5512"/>
		<updated>2025-10-26T20:59:52Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* evehicles.sch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Страница с кратким описанием sch-файлов.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Инструменты для дешифрации и шифрации доступны на странице с [[Утилиты_(Дальнобойщики_2) | утилитами]]. Игра может использовать как зашифрованные, так и расшифрованные файлы. Единственное условие - файл должен иметь расширение sch/cnf, txt читаться не будет. &amp;lt;br&amp;gt;&lt;br /&gt;
Расшифрованные sch для [[История_версий_(Дальнобойщики_2)#Дальнобойщики 2 Издание второе, дополненное | дополненного издания игры]] доступны [https://yadi.sk/d/3V2J6YkS8ltomg здесь].&lt;br /&gt;
&lt;br /&gt;
==etrashboxes.sch==&lt;br /&gt;
Файл с данными о припаркованных автомобилях.&lt;br /&gt;
Имеет следующий вид:&lt;br /&gt;
  ( vehicle  тип  &amp;quot;идентификатор из tech-файла&amp;quot;  номер_окраса  подтип )&lt;br /&gt;
&lt;br /&gt;
Типы: PARKED_X, FUEL_X, CONTAINER_X и KATOK. &amp;lt;br /&amp;gt;&lt;br /&gt;
Подтипы: parked, container, fuel и roadwork. &amp;lt;br /&amp;gt;&lt;br /&gt;
Примеры:&lt;br /&gt;
  ( vehicle  PARKED_X  &amp;quot;PVan&amp;quot;  3  parked )&lt;br /&gt;
  ( vehicle  CONTAINER_X  &amp;quot;AnmObj0231&amp;quot;  0  container )&lt;br /&gt;
  ( vehicle  FUEL_X  &amp;quot;AnmObj0241&amp;quot;  0  fuel )&lt;br /&gt;
  ( vehicle  KATOK  &amp;quot;Katok&amp;quot;  0  roadwork )&lt;br /&gt;
&lt;br /&gt;
==evehicles.sch==&lt;br /&gt;
Файл данных автомобилей.&lt;br /&gt;
Имеет следующий вид:&lt;br /&gt;
  ( vehicle  идентификатор_в_vd_sch  &amp;quot;car_node&amp;quot;  номер_окраса  тип_автомобиля  тип_владельца  цена  отображаемая_мощность&amp;lt;ref&amp;gt;Только для визуального отображения при покупке. Не обязательно должна соответствовать реальной из tech-файла.&amp;lt;/ref&amp;gt; (идентификаторы_совместимых_полуприцепов) флаг )&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
* vehicle - начало строки параметров, одинаковое для каждого типа автомобиля;&lt;br /&gt;
* идентификатор_в_vd_sch - ID используемой подписи автомобиля из vd.sch;&lt;br /&gt;
* car_node - имя параметра car_node используемого автомобиля из vehicle.tech&lt;br /&gt;
&lt;br /&gt;
Типы автомобилей (определяет доступный ассортимент грузов для данной машины):&lt;br /&gt;
* car - легковой автомобиль;&lt;br /&gt;
* lorry - грузовой автомобиль;&lt;br /&gt;
* tractor - тягач;&lt;br /&gt;
* semitrailer - полуприцеп.&lt;br /&gt;
Типы владельцев автомобиля:&lt;br /&gt;
* dumb - автомобиль будет использоваться только ai-трафиком; для покупки будет доступен только после захвата 51% рынка;&lt;br /&gt;
* trucker - автомобиль будет использоваться наёмными водителями; для покупки доступен с начала игры;&lt;br /&gt;
* police - автомобиль будет использоваться игровой милицией;&lt;br /&gt;
* mafia - автомобиль будет использоваться игровыми бандитами;&lt;br /&gt;
* none - автомобиль не будет никем использоваться в игре, при этом на нём можно будет начать игру, прописав его в файле game.cnf.&lt;br /&gt;
Флаг: если указано 1, то транспортное средство сможет получать груз только на '''[[База#Нефтебаза|нефтебазах]]'''.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
  ( vehicle  FIAT_1  &amp;quot;Fiat&amp;quot;  0  car  dumb  32000  408 ())&lt;br /&gt;
  ( vehicle  DAF_TRACTOR1  &amp;quot;Daf&amp;quot;  0  tractor  trucker  76200  355 ( SEMITRAILER1  SEMITRAILER2 ))&lt;br /&gt;
  ( vehicle  SEMITANK4  &amp;quot;STrailerT&amp;quot;  3  semitrailer  none  0  101 () 1 )&lt;br /&gt;
&lt;br /&gt;
==merchandise.sch==&lt;br /&gt;
Файл с данными обо всех товарах, доступных в игре.&lt;br /&gt;
Имеет следующий вид:&lt;br /&gt;
  ( идентификатор  тип  масса  объем&lt;br /&gt;
    ( неизвестное_1  неизвестное_2 неизвестное_3&lt;br /&gt;
      ( топливо тип_транспорта легальность_груза нужен_мафии ) неизвестное_4) прочность неизвестное_5  &amp;quot;Название&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Параметр !! Значения/тип данных !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| идентификатор&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Уникальный идентификатор || Уникальное внутреннее обозначение груза. По этому имени на груз ссылаются другие файлы игры&lt;br /&gt;
|-&lt;br /&gt;
| тип&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || CRATE&amp;lt;br&amp;gt;CRATE20&amp;lt;br&amp;gt;CRATE16&amp;lt;br&amp;gt;PACK&amp;lt;br&amp;gt;KILO&amp;lt;br&amp;gt;UNIT&amp;lt;br&amp;gt;BARREL&amp;lt;br&amp;gt;PIECE&amp;lt;br&amp;gt;BOX&amp;lt;br&amp;gt;TON&lt;br /&gt;
 || Обозначает вид единицы груза (ящик, бочка, упаковка, штука). Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| масса&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число || Масса единицы груза, кг&lt;br /&gt;
|-&lt;br /&gt;
| объем&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число || Объем единицы груза, м&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;При помощи параметров массы и объема можно рассчитать, какие масса и объем груза помещаются в машину:&lt;br /&gt;
 &lt;br /&gt;
   k = масса / объем   &lt;br /&gt;
   s = T&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; / V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
   При k &amp;lt;= s:&lt;br /&gt;
      V = V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; * l&lt;br /&gt;
      T = V * k&lt;br /&gt;
  &lt;br /&gt;
   При k &amp;gt; s:&lt;br /&gt;
      T = T&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; * l&lt;br /&gt;
      V = T / k&lt;br /&gt;
   &lt;br /&gt;
   Где:&lt;br /&gt;
   k - плотность груза (вес на м&amp;lt;sup&amp;gt;3)&amp;lt;/sup&amp;gt;, кг/м&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&lt;br /&gt;
   s - индекс грузоподъемности машины&amp;lt;ref&amp;gt;Индекс грузоподъмности машины равен отношению грузоподъемности к объему кузова. Если плотность груза больше индекса грузоподъемности, такой груз считается тяжелым. Степень загрузки машины для тяжелых грузов исходит из грузоподъемности. Если же плотность груза меньше индекса, такой груз считается габаритным. Степень загрузки машины для габаритных грузов исходит из объема кузова.&amp;lt;/ref&amp;gt;, кг/м&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&lt;br /&gt;
   T&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; - грузоподъемность машины, кг&lt;br /&gt;
   V&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; - объем кузова машины, м&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&lt;br /&gt;
   l - лимит погрузки&amp;lt;ref&amp;gt;Лимит погрузки - фактическая погружаемая масса/объем груза от возможной. По какой-то причине базы всегда загружают машину не более чем на 85% от максимальной вместительности.&amp;lt;/ref&amp;gt;, % (на базах всегда 0,85)&lt;br /&gt;
   T - масса погрузки, кг&lt;br /&gt;
   V - объем погрузки, м&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| неизвестное_1&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число || Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| неизвестное_2&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число|| Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| неизвестное_3&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число || Копирует значение параметра прочности, за исключением нелегальных и некоторых других грузов. Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| топливо || fuel || Присутствует только в одноименном грузе. Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| тип_транспорта&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || trucks&amp;lt;br&amp;gt;cars || Тип транспорта, который может перевозить данный груз - грузовики или легковые автомобили. Для грузов, которые могут перевозить и те, и другие, существуют записи-дубликаты с разными значениями этого параметра&lt;br /&gt;
|-&lt;br /&gt;
| легальность_груза || illegal || Присутствие параметра указывает, что груз нелегален&lt;br /&gt;
|-&lt;br /&gt;
| нужен_мафии || formafia || Присутствие параметра указывает, что за грузом охотится мафия&lt;br /&gt;
|-&lt;br /&gt;
| неизвестное_4|| Число || Параметр присутствует только у нелегальных грузов. Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| прочность&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число || Из прочности рассчитывается хрупкость груза:&lt;br /&gt;
   F = (1 - прочность) * 100&lt;br /&gt;
|-&lt;br /&gt;
| неизвестное_5&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Число || Влияние на игру не установлено&lt;br /&gt;
|-&lt;br /&gt;
| название&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; || Строка || Название груза, отображаемое в игре&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; - параметры со звездочкой обязательны (присутствуют у всех грузов в игре).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
  ( BREAD  CRATE  25  0.1 &lt;br /&gt;
    ( 25  70  0.85 &lt;br /&gt;
      ( trucks )) 0.85  71  &amp;quot;Хлеб&amp;quot; ) — обычный груз для грузовика&lt;br /&gt;
&lt;br /&gt;
 ( HEROINE  KILO  1  0.0003 &lt;br /&gt;
    ( 1500  441.465  0.4 &lt;br /&gt;
      ( trucks  illegal  formafia ) 1.3 ) 1  70  &amp;quot;Героин&amp;quot; ) — нелегальный груз для грузовика, за которым охотится мафия&lt;br /&gt;
&lt;br /&gt;
 ( C_JEWELRY  BOX  100  0.1 &lt;br /&gt;
    ( 0  220000  0.5 &lt;br /&gt;
      ( cars  formafia )) 0.6  0  &amp;quot;Юв. изделия&amp;quot; ) — груз для легкового автомобиля, за которым охотится мафия&lt;br /&gt;
&lt;br /&gt;
==ms.sch==&lt;br /&gt;
Файл локализации сообщений пейджера. Вид записи такой же, как и в vd.sch:&lt;br /&gt;
  ( NEED_A_PETROL_SEMITRAILER  .  &amp;quot;ДЛЯ ПЕРЕВОЗКИ ТОПЛИВА ВАМ НУЖНА АВТОЦИСТЕРНА&amp;quot; )&lt;br /&gt;
  ( LOAD_AT_AN_OIL_TANK  .  &amp;quot;В АВТОЦИСТЕРНУ МОЖНО ТОЛЬКО ЗАЛИВАТЬ ТОПЛИВО У ГАЗГОЛЬДЕРА&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
==names.sch==&lt;br /&gt;
Файл с именами водителей. &amp;lt;br /&amp;gt;&lt;br /&gt;
Пример записи файла:&lt;br /&gt;
  ( &amp;quot;COP1&amp;quot;  male  police  1  0 )&lt;br /&gt;
  ( &amp;quot;HOOD1&amp;quot;  male  mafia  1 )&lt;br /&gt;
  ( &amp;quot;ВИТАЛИЙ&amp;quot;  male  trucker  1 )&lt;br /&gt;
&lt;br /&gt;
У милиции после номера записан флаг, показывающий возможность получения взятки. При 0 - принятие взяток невозможно, при 1 - возможно.&lt;br /&gt;
&lt;br /&gt;
==restable.sch==&lt;br /&gt;
Предположительно, название происходит от англ. &amp;quot;'''res'''ource '''table'''&amp;quot; - таблица ресурсов.&lt;br /&gt;
Файл содержит цены и описание (на английском языке) усовершенствований транспорта на СТО.&lt;br /&gt;
&lt;br /&gt;
Имеет следующий вид: &lt;br /&gt;
  ( идентификатор             ( &amp;quot;имя стандартного объекта&amp;quot; нулевая цена ) ( &amp;quot;имя улучшенного объекта&amp;quot; цена усовершенствования )   )&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
  ( PR_FORCED_ENGINE             ( &amp;quot;Regular engine&amp;quot; 0 ) ( &amp;quot;Forced engine&amp;quot; 12500 )   )&lt;br /&gt;
&lt;br /&gt;
==vd.sch==&lt;br /&gt;
Файл локализации названий игрового транспорта.&lt;br /&gt;
ID имеют следующий вид:&lt;br /&gt;
  ( идентификатор  .  &amp;quot;название_автомобиля&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
  ( FIAT_1  .  &amp;quot;Фиат&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
==SCH-файлы из папки ENV==&lt;br /&gt;
&lt;br /&gt;
Файлы со свойствами участков игрового мира, всего их 36 — от mod_aa.sch до mod_dq.sch. &lt;br /&gt;
Содержат настройки объектов, находящихся на данных участках:&lt;br /&gt;
*Ассортимент грузов на базах (идентификаторы груза взяты из merchandise.sch)&lt;br /&gt;
*Ассортимент апгрейдов на СТО (идентификаторы апгрейдов взяты из restable.sch)&lt;br /&gt;
*Сообщения, присылаемые на пейджер при въезде в населенный пункт&lt;br /&gt;
*Объявления о ремонтных работах на участках&lt;br /&gt;
*Расположение места стоянок автомобилей милиции и мафии на обочине&lt;br /&gt;
&lt;br /&gt;
Пример (фрагменты файла mod_bd.sch):&lt;br /&gt;
  ( nodeevent  BASE08NORTH  UNCONDITIONAL  &amp;quot;store_08_north&amp;quot;  NORTH  &amp;quot;БАЗА БУХТА НАПРАВО, ЧЕРЕЗ 100 М&amp;quot; ) — сообщение о прибытии на базу&lt;br /&gt;
 &lt;br /&gt;
      ( PR_FORCED_ENGINE  1 )&lt;br /&gt;
      ( PR_OIL_ADDITIVE  1 )&lt;br /&gt;
      ( PR_ABS  1 )&lt;br /&gt;
      ( PR_ADJUSTABLE_SUSPENSION  1 )&lt;br /&gt;
      ( PR_BRAKES  1 )&lt;br /&gt;
      ( PR_ENGINE_BRAKE  1 )&lt;br /&gt;
      ( PR_REINFORCED_CHASSIS  1 )&lt;br /&gt;
      ( PR_BULETPROOF_GLASS  1 )&lt;br /&gt;
      ( PR_NAVIGATOR  1 )&lt;br /&gt;
      ( PR_TIRES  3 )                                                                                    — ассортимент апгрейдов&lt;br /&gt;
      ( PR_CARGO_SCANNER  1 )&lt;br /&gt;
      ( PR_HORN  1 )&lt;br /&gt;
      ( PR_FIRE_PROTECTION  1 )&lt;br /&gt;
      ( PR_EXTRA_TANK  1 )&lt;br /&gt;
      ( PR_ANTI_RADAR  1 )&lt;br /&gt;
      ( PR_STEALTH_BODY_PAINT  1 )&lt;br /&gt;
      ( PR_HEADLIGHT_PROTECTION  1 )&lt;br /&gt;
      ( PR_AIR_FILTER_SNORKEL  1 )))&lt;br /&gt;
 &lt;br /&gt;
      ( CHAMPAGNE  0 )&lt;br /&gt;
      ( FRESHFISH  0 )&lt;br /&gt;
      ( SALTEDFISH  0 )&lt;br /&gt;
      ( SHOES  0 )&lt;br /&gt;
      ( AUTOPARTS  0 )&lt;br /&gt;
      ( VIDEOCAMERA  0 )&lt;br /&gt;
      ( PENTIUM_III  0 )&lt;br /&gt;
      ( COMPUTER_GAMES  0 )                                                                                — ассортимент грузов&lt;br /&gt;
      ( C_CHAMPAGNE  0 )&lt;br /&gt;
      ( C_SHOES  0 )&lt;br /&gt;
      ( C_VIDEOCAMERA  0 )&lt;br /&gt;
      ( C_CAMERA  0 )&lt;br /&gt;
      ( C_COMPUTER_GAMES  0 )&lt;br /&gt;
      ( C_POSTAGE_STAMPS  0 )&lt;br /&gt;
      ( C_WAGES  0 )&lt;br /&gt;
      ( C_MAIL  0 ))&lt;br /&gt;
 &lt;br /&gt;
  ( obstacle  OBST_BD_1  REGULAR  &amp;quot;bd&amp;quot;  &amp;quot;CLOSE_BD_L&amp;quot;  &amp;quot;&amp;quot;  &amp;quot;&amp;quot;  &amp;quot;МОСТ НА ТРАССЕ БУХТА-НИЖНЕГОРСК НА РЕМОНТЕ&amp;quot;  &amp;quot;МОСТ НА ТРАССЕ БУХТА-НИЖНЕГОРСК ВОССТАНОВЛЕН&amp;quot; &lt;br /&gt;
    ( &amp;quot;pos_work_bd1&amp;quot; ))&lt;br /&gt;
  ( obstacle  OBST_BD_2  REGULAR  &amp;quot;bd&amp;quot;  &amp;quot;CLOSE_BD_R&amp;quot;  &amp;quot;&amp;quot;  &amp;quot;&amp;quot;  &amp;quot;МОСТ НА ТРАССЕ БУХТА-НИЖНЕГОРСК НА РЕМОНТЕ&amp;quot;  &amp;quot;МОСТ НА ТРАССЕ БУХТА-НИЖНЕГОРСК ВОССТАНОВЛЕН&amp;quot; &lt;br /&gt;
    ( &amp;quot;pos_work_bd0&amp;quot; )) — сообщения о ремонте&lt;br /&gt;
&lt;br /&gt;
===Нумерация населенных пунктов===&lt;br /&gt;
Населенным пунктам присвоены следующие числовые обозначения:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Населенный пункт !! Номер !! Файл *.b3d&lt;br /&gt;
|-&lt;br /&gt;
| Приозёрск || 0 || aj&lt;br /&gt;
|-&lt;br /&gt;
| Залесск || 1 || ar&lt;br /&gt;
|-&lt;br /&gt;
| Ельнино || 2 || au&lt;br /&gt;
|-&lt;br /&gt;
| Южный || 3 || ap&lt;br /&gt;
|-&lt;br /&gt;
| Ключи || 4 || bc&lt;br /&gt;
|-&lt;br /&gt;
| Шахты || 5 || am&lt;br /&gt;
|-&lt;br /&gt;
| Боровое || 6 || ad&lt;br /&gt;
|-&lt;br /&gt;
| Нижнегорск || 7 || cb&lt;br /&gt;
|-&lt;br /&gt;
| Бухта || 8 || bd&lt;br /&gt;
|-&lt;br /&gt;
| Горный || 9 || dc&lt;br /&gt;
|-&lt;br /&gt;
| Алмазный || 10 || aa&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Парковки===&lt;br /&gt;
  ( parking  MARKET_G  &amp;quot;??&amp;quot;  6 ()&lt;br /&gt;
    (&lt;br /&gt;
      ( node  &amp;quot;node_car_0603&amp;quot; )&lt;br /&gt;
      ( node  &amp;quot;node_car_0604&amp;quot; )&lt;br /&gt;
      ( node  &amp;quot;node_car_0605&amp;quot; )&lt;br /&gt;
      ( node  &amp;quot;node_car_0608&amp;quot;  4  &amp;quot;Южный&amp;quot; )&lt;br /&gt;
    )&lt;br /&gt;
  8 - число автомобилей, доступных для заказа из данной точки&lt;br /&gt;
  )&lt;br /&gt;
  &lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=Vehicle.tech&amp;diff=5511</id>
		<title>Vehicle.tech</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=Vehicle.tech&amp;diff=5511"/>
		<updated>2025-10-26T17:43:31Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг_(Дальнобойщики_2)]]&lt;br /&gt;
[[Категория:Транспортные_средства_(Дальнобойщики_2)]]&lt;br /&gt;
'''vehicle.tech''' - файл, отвечающий за различные характеристики автомобилей в [[Дальнобойщики_2|Дальнобойщиках 2]].&lt;br /&gt;
== Как и чем редактировать vehicle.tech? ==&lt;br /&gt;
Существует несколько вариантов редактирования данного файла:&amp;lt;br&amp;gt;&lt;br /&gt;
# С помощью утилиты '''D2 Tech Editor'''. Автор программы -  Алексей Воронов ([[Участник:BoPoH|BoPoH]]). Скачать можно [[Утилиты (Дальнобойщики 2)|со страницы с утилитами]].&amp;lt;br /&amp;gt;&lt;br /&gt;
# Через HEX-редактор. Скачать hsl-структуры для версий 6.6 и 7.2 можно [https://vk.com/wall-11599748_44108?reply=47612 здесь], для версии 8.0 - [https://vk.com/topic-157113673_39349010?post=128 тут].&lt;br /&gt;
# Наконец, '''наиболее правильный способ''' - собрать файл из исходных текстовых файлов. Инструкция и ссылка на загрузку доступны [https://vk.com/page-157113673_53558294 здесь].&lt;br /&gt;
== Переменные и их значения ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Название переменной||Значение &lt;br /&gt;
|-&lt;br /&gt;
|CenterMassInB3D||Центр масс.&lt;br /&gt;
|-&lt;br /&gt;
|mass||Масса автомобиля. &amp;lt;ref&amp;gt; Также отвечает за звук двигателя. Бензиновый двигатель = 0-3000, дизель = 3000 и выше. &amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|rwheel||Расстояние между дорогой и нижним концом пружины.&lt;br /&gt;
|-&lt;br /&gt;
|rwheel1||Толщина колеса.&lt;br /&gt;
|-&lt;br /&gt;
|tank||Объём топливного бака. &amp;lt;ref&amp;gt; Если изменить только значение объёма бака, то на дальность хода грузовика это никак не повлияет. Дело в том, что мгновенный расход топлива вычисляется в относительных единицах, а не в литрах. Т. е. используется отношение долей (процентов или промилле) от полного объёма бака к количеству совершённых оборотов коленвала.&lt;br /&gt;
&lt;br /&gt;
Чтобы в этом убедиться, достаточно установить крошечный объём бака (н-р, всего 1 л) и замерить дальность хода. Она окажется такой же, как и при 100 л, и при 1000 л.&lt;br /&gt;
&lt;br /&gt;
Чтобы дальность хода увеличивалась пропорционально увеличению объёма бака, необходимо увеличивать и значение переменной &amp;quot;fuelTimeEndurance&amp;quot;. [https://vk.com/wall-11599748_51210?reply=51217 Источник] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|fuelTimeEndurance||Относительная топливная эффективность. &amp;lt;ref&amp;gt; Данная переменная отражает относительную топливную эффективность, т. е. это некий коэффициент, указывающий насколько медленнее будет расходоваться единичный объём топлива (соответствующий объёму бака) по сравнению с некоторым эталонным двигателем, для которого значение данной переменной равно 1. [https://vk.com/wall-11599748_51210?reply=51241 Источник]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|fuelConsumption||Расход топлива (количество литров на 10 км).&lt;br /&gt;
|-&lt;br /&gt;
|kilometrage||неизвестно&lt;br /&gt;
|-&lt;br /&gt;
|air_press_coeff||Давление воздуха.&lt;br /&gt;
|-&lt;br /&gt;
|air_resist_coeff||Сопротивление воздуха.&lt;br /&gt;
|-&lt;br /&gt;
|air_side_resist_coeff||Боковое сопротивление воздуха. &amp;lt;ref&amp;gt;Также влияет на блокировку вращения прицепа относительно тягача. &amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|front_wheel_thickness||Ширина передних колёс.&lt;br /&gt;
|-&lt;br /&gt;
|rear_wheel_thickness||Ширина задних колёс.&lt;br /&gt;
|-&lt;br /&gt;
|maxrotmomentum||Максимальный крутящий момент.&lt;br /&gt;
|-&lt;br /&gt;
|breakpower||Сила торможения.&lt;br /&gt;
|-&lt;br /&gt;
|rear_axle_coeff||Передаточное число редуктора.&lt;br /&gt;
|-&lt;br /&gt;
|reverse_trans_coeff0||Передаточное число передачи заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
|gear_trans_coeff1..13||Передаточные числа передач с первой по тринадцатую.&lt;br /&gt;
|-&lt;br /&gt;
|tach_with_max_power||Обороты максимального крутящего момента. Также определяют максимальные обороты двигателя вообще, примерно равные 3 * tach_with_max_power&lt;br /&gt;
|-&lt;br /&gt;
|cargo_and_body_pick_load||Грузоподъёмность.&lt;br /&gt;
|-&lt;br /&gt;
|body_mass||Масса фургона.&lt;br /&gt;
|-&lt;br /&gt;
|body_height||Высота фургона.&lt;br /&gt;
|-&lt;br /&gt;
|body_square||Объём фургона.&lt;br /&gt;
|-&lt;br /&gt;
|center_of_cargo_bottom||Позиция груза в кузове автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
|driving_wheels||Колёсная формула.&lt;br /&gt;
|-&lt;br /&gt;
|sterring_wheels||Поворотные колёса.&lt;br /&gt;
|-&lt;br /&gt;
|touching_road_wheels||Показывает, какие колёса соприкасаются с поверхностью.&lt;br /&gt;
|-&lt;br /&gt;
|OV||Координаты салона.&lt;br /&gt;
|-&lt;br /&gt;
|tangViewer||Наклон камеры из салона.&lt;br /&gt;
|-&lt;br /&gt;
|I||Момент инерции.&lt;br /&gt;
|-&lt;br /&gt;
|suspension||Подвеска автомобиля. &amp;lt;ref&amp;gt;Первые 4 параметра - минимальная высота, остальные 4 - максимальная. Вообще, подвеска в tech-файле представлена в виде восьми параметров: hmin0, hmin1, hmin2, hmin3 и hmax0, hmax1, hmax2, hmax3 (см. файл carv.ini из [[Автомобильные_гонки|Car Races Demo]]). &amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Ks||Коэффициент жесткости пружин.&lt;br /&gt;
|-&lt;br /&gt;
|Cs||Коэффициент амортизаторов.&lt;br /&gt;
|-&lt;br /&gt;
|CollisionRadius||Радиус коллизии автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
|CollisionCenter||Центр коллизии автомобиля (вместе с предыдущим параметром, по всей видимости, используется для позиционирования создаваемого дорожного трафика).&lt;br /&gt;
|-&lt;br /&gt;
|rubber_collision_coeff||Коэффициент коллизии колёс.&lt;br /&gt;
|-&lt;br /&gt;
|slide_collision_coeff||Коэффициент бокового трения.&lt;br /&gt;
|-&lt;br /&gt;
|Corner_Mark_1..11||Точки коллизии для расчёта столкновений со статичными объектами (игровым миром). Обычно совпадает с коллизией, определённой объектами CollisionPlane.&lt;br /&gt;
|-&lt;br /&gt;
|AddColPnts0...3||Нижние точки крайних передних и крайних задних колёс, автоматические определяемые игрой при сборке tech-файла.&lt;br /&gt;
|-&lt;br /&gt;
|Corner_Mark_W1...4||Нижние габаритные точки коллизии автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
|CollisionPlane0...16||Плоскости коллизии для расчёта столкновений с динамическими объектами (другой транспорт, бочки). Первые три числа - нормальный вектор, задающий направление, четвёртый параметр - удаление плоскости от начала координат (0, 0, 0). Каждая плоскость перпендикулярна точке (0, 0, 0). Границы пересечений данных плоскостей образуют коллизию автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
|tvCameraPosition1||Позиция левого зеркала.&lt;br /&gt;
|-&lt;br /&gt;
|tvCameraPosition2||Позиция центрального зеркала.&lt;br /&gt;
|-&lt;br /&gt;
|tvCameraPosition3||Позиция правого зеркала.&lt;br /&gt;
|-&lt;br /&gt;
|tvCameraPosition4||неизвестно&lt;br /&gt;
|-&lt;br /&gt;
|tvCameraRightConer||неизвестно&lt;br /&gt;
|-&lt;br /&gt;
|SmokePosition||Позиция выхлопа.&lt;br /&gt;
|-&lt;br /&gt;
|SmokeDirection||Направление выхлопа.&lt;br /&gt;
|-&lt;br /&gt;
|SmokePosition2||Позиция второго выхлопа.&lt;br /&gt;
|-&lt;br /&gt;
|SmokeDirection2||Направление второго выхлопа.&lt;br /&gt;
|-&lt;br /&gt;
|flame_place||Позиция огня горящего двигателя.&lt;br /&gt;
|-&lt;br /&gt;
|Fara_FL||Координаты свечения левой фары.&lt;br /&gt;
|-&lt;br /&gt;
|Fara_FR||Координаты свечения правой фары.&lt;br /&gt;
|-&lt;br /&gt;
|Fara_BLs||Координаты свечения заднего левого фонаря.&lt;br /&gt;
|-&lt;br /&gt;
|Fara_BRs||Координаты свечения заднего правого фонаря.&lt;br /&gt;
|-&lt;br /&gt;
|Fara_BL||Координаты свечения левого огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
|Fara_BR||Координаты свечения правого огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
|horse_power||Мощность двигателя.&lt;br /&gt;
|-&lt;br /&gt;
|price||Цена автомобиля (указанная здесь не используется, задаётся в [[Sch-файлы#evehicles.sch|evehicles.sch]]).&lt;br /&gt;
|-&lt;br /&gt;
|glowwing||неизвестно&lt;br /&gt;
|-&lt;br /&gt;
|lowSaddle||Координаты сцепки на тягаче для соединения с полуприцепом.&lt;br /&gt;
|-&lt;br /&gt;
|topSaddle||Координаты сцепки на полуприцепе для соединения с тягачом.&lt;br /&gt;
|-&lt;br /&gt;
|Towhook||Координаты сцепки на грузовике для соединения с прицепом (в игре не используется).&lt;br /&gt;
|-&lt;br /&gt;
|Coupler||Координаты сцепки на прицепе для соединения с грузовиком.&lt;br /&gt;
|-&lt;br /&gt;
|shiftSaddle||Смещение точки сцепки по оси Y относительно параметра lowSaddle.&lt;br /&gt;
|-&lt;br /&gt;
|CouplerLength||Вероятно, аналогично предыдущему, но относительно параметра Towhook.&lt;br /&gt;
|-&lt;br /&gt;
|SpeedScale||Первое число - максимальное значение скорости на шкале спидометра, второе - максимальный угол поворота стрелки спидометра.&lt;br /&gt;
|-&lt;br /&gt;
|TachScale||Аналогично SpeedScale.&lt;br /&gt;
|-&lt;br /&gt;
|FuelScale||Аналогично TachScale.&lt;br /&gt;
|-&lt;br /&gt;
|CabRWindow||неизвестно &lt;br /&gt;
|-&lt;br /&gt;
|CabLWindow||неизвестно &lt;br /&gt;
|-&lt;br /&gt;
|CabFrontWindow||неизвестно &lt;br /&gt;
|-&lt;br /&gt;
|Drivers_neck_Angles||Ограничения поворота камеры в салоне по осям (мин. Z, мин. Y, мин. X, 0, макс. X, макс. Y, макс. Z).&lt;br /&gt;
|-&lt;br /&gt;
|cockpit_space||Имя локатора геометрии кабины в trucks.b3d (&amp;lt;автомобиль&amp;gt;BoothSpace). Данный локатор используется для имитации качения кабины.&lt;br /&gt;
|-&lt;br /&gt;
|prefix||Префикс объектов автомобиля в trucks.b3d (локаторы и фары).&lt;br /&gt;
|-&lt;br /&gt;
|prefixCab||Префикс используемой кабины из cabines.b3d.&lt;br /&gt;
|-&lt;br /&gt;
|car_node||Имя блока автомобиля в trucks.b3d.&lt;br /&gt;
|-&lt;br /&gt;
|trailer_type||Тип полуприцепа: 1 - стандартный, 2 - платформа, 3 - цистерна.&lt;br /&gt;
|-&lt;br /&gt;
|Fara_Dir||неизвестно&lt;br /&gt;
|-&lt;br /&gt;
|Fara_Width||неизвестно&lt;br /&gt;
|}&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
==Примечания==&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5510</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5510"/>
		<updated>2025-10-23T14:54:43Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Источник света (33) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура vertsStruct:&lt;br /&gt;
 //В блоке-хранилище вершин переменную vertsStructType следует читать как четыре uint8, тогда:&lt;br /&gt;
 int normals_type = vertsStructType[0]&lt;br /&gt;
 int num_UV       = vertsStructType[1]&lt;br /&gt;
 int some_data1   = vertsStructType[2]&lt;br /&gt;
 int some_data1   = vertsStructType[3]&lt;br /&gt;
 //&lt;br /&gt;
 struct vertsStruct{&lt;br /&gt;
     Vector3 position;&lt;br /&gt;
     Vector2 UV;&lt;br /&gt;
     Vector2 additionalUV[num_UV];&lt;br /&gt;
   &lt;br /&gt;
     if (normals_type == 1 || normals_type == 2){&lt;br /&gt;
         Vector3 normal; //обычная нормаль&lt;br /&gt;
     } else if (normals_type == 3){&lt;br /&gt;
         float normal;   //а в таком случае модель не будет затеняться&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Структура faceStruct:&lt;br /&gt;
 struct faceStruct{&lt;br /&gt;
   int   format;&lt;br /&gt;
   float num_1;&lt;br /&gt;
   int   num_32767;&lt;br /&gt;
   int   mtlIndex;&lt;br /&gt;
   int   indexCount;&lt;br /&gt;
   &amp;lt;faceIndex[indexCount] indexes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct faceIndex{&lt;br /&gt;
     int vertexIndex;&lt;br /&gt;
     if (inter_format &amp;amp; 2){&lt;br /&gt;
         Vector2 UV; //индивидуальная UV для данного полигона&lt;br /&gt;
     }&lt;br /&gt;
     if (inter_format &amp;amp; 0x10){&lt;br /&gt;
         if (inter_format &amp;amp; 0x1){&lt;br /&gt;
             Vector3 intensity_vector; //нормаль&lt;br /&gt;
         } else if (inter_format &amp;amp; 0x20){&lt;br /&gt;
             float intensity_float; //если есть, то затенение не будет использоваться&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 35 типов объектов (1 - 33, 41 и 42). К выходу «Дальнобойщиков 2» их количество было увеличено до 41.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  border;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Плоскость border задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09.&lt;br /&gt;
&lt;br /&gt;
Данный контейнер может:&lt;br /&gt;
# Использоваться в качестве ограничителя зоны отрисовки объекта (повсеместно применяется в &amp;quot;Дальнобойщиках 2&amp;quot; в контейнерах коллизии игрового мира). В таком случае отрисовка происходит относительно тангенса, перпендикулярного указанному вектору ''border''&amp;lt;ref&amp;gt;За информацию благодарность LabVaKars&amp;lt;/ref&amp;gt;.&lt;br /&gt;
# Задавать границы события. В таком случае границей события будет сумма всех ''border'' родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_type09_render_tree.jpg|Визуализация зон отрисовки коллизии дорог файла ap.b3d в программе Blender 3.6.23 при помощи плагинов от LabVaKars.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 15==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, структура аналогична блоку типа 16. Не встречается в файлах игры.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 22==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int dataCount;&lt;br /&gt;
 &amp;lt;float[dataCount] someData&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 26==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
 Vector3  some_vector3;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct spriteData{&lt;br /&gt;
  int   format;&lt;br /&gt;
  float var1;&lt;br /&gt;
  int   num_32767;&lt;br /&gt;
  int   mtlIndex;&lt;br /&gt;
  int   vertsCount;&lt;br /&gt;
  &amp;lt;spriteVertex[vertsCount] verts&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct spriteVertex{&lt;br /&gt;
    Vector2 position;&lt;br /&gt;
    if (inter_format &amp;amp; 2){&lt;br /&gt;
      Vector2 UV;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт. Использует материал с текстурой формата TXR.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Набор спрайтов (31)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  spritePosition?; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.  Использует маску формата MSK, в отличие от типа 28. В Type31Data указаны разные варианты масок, в порядке возрастания разрешения текстуры. Судя по всему, переключение отображаемой маски происходит в зависимости от расстояния до наблюдателя.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер комнаты (41)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      paramsCount;&lt;br /&gt;
 &amp;lt;int[paramsCount] params&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё один вариант контейнера комнаты. Поддерживается игрой, но не используется ни в одном из файлов. Параметров может быть не более двух.&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
* На каждую вершину 3D-модели на данном слое UV-развёртки в блоке вершин может приходиться только одна пара UV-координат. Иными словами, недопускается, чтобы одна и та же вершина, используемая в разных треугольниках, имела разные UV-координаты. На каждый островок UV должен приходиться свой набор вершин. Впрочем, данное ограничение можно обойти, указывая индивидуальные координаты вершин каждого треугольника в блоке геометрии. Но в таком случае отражения (см. параметр &amp;quot;env&amp;quot; в [[RES_(формат_файлов)|RES]]) будут рассчитываться не для всей модели, а для каждого треугольника.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5509</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5509"/>
		<updated>2025-10-22T23:28:20Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Контейнер комнаты (41) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура vertsStruct:&lt;br /&gt;
 //В блоке-хранилище вершин переменную vertsStructType следует читать как четыре uint8, тогда:&lt;br /&gt;
 int normals_type = vertsStructType[0]&lt;br /&gt;
 int num_UV       = vertsStructType[1]&lt;br /&gt;
 int some_data1   = vertsStructType[2]&lt;br /&gt;
 int some_data1   = vertsStructType[3]&lt;br /&gt;
 //&lt;br /&gt;
 struct vertsStruct{&lt;br /&gt;
     Vector3 position;&lt;br /&gt;
     Vector2 UV;&lt;br /&gt;
     Vector2 additionalUV[num_UV];&lt;br /&gt;
   &lt;br /&gt;
     if (normals_type == 1 || normals_type == 2){&lt;br /&gt;
         Vector3 normal; //обычная нормаль&lt;br /&gt;
     } else if (normals_type == 3){&lt;br /&gt;
         float normal;   //а в таком случае модель не будет затеняться&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Структура faceStruct:&lt;br /&gt;
 struct faceStruct{&lt;br /&gt;
   int   format;&lt;br /&gt;
   float num_1;&lt;br /&gt;
   int   num_32767;&lt;br /&gt;
   int   mtlIndex;&lt;br /&gt;
   int   indexCount;&lt;br /&gt;
   &amp;lt;faceIndex[indexCount] indexes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct faceIndex{&lt;br /&gt;
     int vertexIndex;&lt;br /&gt;
     if (inter_format &amp;amp; 2){&lt;br /&gt;
         Vector2 UV; //индивидуальная UV для данного полигона&lt;br /&gt;
     }&lt;br /&gt;
     if (inter_format &amp;amp; 0x10){&lt;br /&gt;
         if (inter_format &amp;amp; 0x1){&lt;br /&gt;
             Vector3 intensity_vector; //нормаль&lt;br /&gt;
         } else if (inter_format &amp;amp; 0x20){&lt;br /&gt;
             float intensity_float; //если есть, то затенение не будет использоваться&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 35 типов объектов (1 - 33, 41 и 42). К выходу «Дальнобойщиков 2» их количество было увеличено до 41.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  border;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Плоскость border задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09.&lt;br /&gt;
&lt;br /&gt;
Данный контейнер может:&lt;br /&gt;
# Использоваться в качестве ограничителя зоны отрисовки объекта (повсеместно применяется в &amp;quot;Дальнобойщиках 2&amp;quot; в контейнерах коллизии игрового мира). В таком случае отрисовка происходит относительно тангенса, перпендикулярного указанному вектору ''border''&amp;lt;ref&amp;gt;За информацию благодарность LabVaKars&amp;lt;/ref&amp;gt;.&lt;br /&gt;
# Задавать границы события. В таком случае границей события будет сумма всех ''border'' родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_type09_render_tree.jpg|Визуализация зон отрисовки коллизии дорог файла ap.b3d в программе Blender 3.6.23 при помощи плагинов от LabVaKars.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 15==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, структура аналогична блоку типа 16. Не встречается в файлах игры.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 22==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int dataCount;&lt;br /&gt;
 &amp;lt;float[dataCount] someData&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 26==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
 Vector3  some_vector3;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct spriteData{&lt;br /&gt;
  int   format;&lt;br /&gt;
  float var1;&lt;br /&gt;
  int   num_32767;&lt;br /&gt;
  int   mtlIndex;&lt;br /&gt;
  int   vertsCount;&lt;br /&gt;
  &amp;lt;spriteVertex[vertsCount] verts&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct spriteVertex{&lt;br /&gt;
    Vector2 position;&lt;br /&gt;
    if (inter_format &amp;amp; 2){&lt;br /&gt;
      Vector2 UV;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт. Использует материал с текстурой формата TXR.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Набор спрайтов (31)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  spritePosition?; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.  Использует маску формата MSK, в отличие от типа 28. В Type31Data указаны разные варианты масок, в порядке возрастания разрешения текстуры. Судя по всему, переключение отображаемой маски происходит в зависимости от расстояния до наблюдателя.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер комнаты (41)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      paramsCount;&lt;br /&gt;
 &amp;lt;int[paramsCount] params&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё один вариант контейнера комнаты. Поддерживается игрой, но не используется ни в одном из файлов. Параметров может быть не более двух.&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
* На каждую вершину 3D-модели на данном слое UV-развёртки в блоке вершин может приходиться только одна пара UV-координат. Иными словами, недопускается, чтобы одна и та же вершина, используемая в разных треугольниках, имела разные UV-координаты. На каждый островок UV должен приходиться свой набор вершин. Впрочем, данное ограничение можно обойти, указывая индивидуальные координаты вершин каждого треугольника в блоке геометрии. Но в таком случае отражения (см. параметр &amp;quot;env&amp;quot; в [[RES_(формат_файлов)|RES]]) будут рассчитываться не для всей модели, а для каждого треугольника.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5508</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5508"/>
		<updated>2025-10-22T23:27:16Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Замечания по структурам */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура vertsStruct:&lt;br /&gt;
 //В блоке-хранилище вершин переменную vertsStructType следует читать как четыре uint8, тогда:&lt;br /&gt;
 int normals_type = vertsStructType[0]&lt;br /&gt;
 int num_UV       = vertsStructType[1]&lt;br /&gt;
 int some_data1   = vertsStructType[2]&lt;br /&gt;
 int some_data1   = vertsStructType[3]&lt;br /&gt;
 //&lt;br /&gt;
 struct vertsStruct{&lt;br /&gt;
     Vector3 position;&lt;br /&gt;
     Vector2 UV;&lt;br /&gt;
     Vector2 additionalUV[num_UV];&lt;br /&gt;
   &lt;br /&gt;
     if (normals_type == 1 || normals_type == 2){&lt;br /&gt;
         Vector3 normal; //обычная нормаль&lt;br /&gt;
     } else if (normals_type == 3){&lt;br /&gt;
         float normal;   //а в таком случае модель не будет затеняться&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Структура faceStruct:&lt;br /&gt;
 struct faceStruct{&lt;br /&gt;
   int   format;&lt;br /&gt;
   float num_1;&lt;br /&gt;
   int   num_32767;&lt;br /&gt;
   int   mtlIndex;&lt;br /&gt;
   int   indexCount;&lt;br /&gt;
   &amp;lt;faceIndex[indexCount] indexes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct faceIndex{&lt;br /&gt;
     int vertexIndex;&lt;br /&gt;
     if (inter_format &amp;amp; 2){&lt;br /&gt;
         Vector2 UV; //индивидуальная UV для данного полигона&lt;br /&gt;
     }&lt;br /&gt;
     if (inter_format &amp;amp; 0x10){&lt;br /&gt;
         if (inter_format &amp;amp; 0x1){&lt;br /&gt;
             Vector3 intensity_vector; //нормаль&lt;br /&gt;
         } else if (inter_format &amp;amp; 0x20){&lt;br /&gt;
             float intensity_float; //если есть, то затенение не будет использоваться&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 35 типов объектов (1 - 33, 41 и 42). К выходу «Дальнобойщиков 2» их количество было увеличено до 41.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  border;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Плоскость border задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09.&lt;br /&gt;
&lt;br /&gt;
Данный контейнер может:&lt;br /&gt;
# Использоваться в качестве ограничителя зоны отрисовки объекта (повсеместно применяется в &amp;quot;Дальнобойщиках 2&amp;quot; в контейнерах коллизии игрового мира). В таком случае отрисовка происходит относительно тангенса, перпендикулярного указанному вектору ''border''&amp;lt;ref&amp;gt;За информацию благодарность LabVaKars&amp;lt;/ref&amp;gt;.&lt;br /&gt;
# Задавать границы события. В таком случае границей события будет сумма всех ''border'' родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_type09_render_tree.jpg|Визуализация зон отрисовки коллизии дорог файла ap.b3d в программе Blender 3.6.23 при помощи плагинов от LabVaKars.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 15==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, структура аналогична блоку типа 16. Не встречается в файлах игры.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 22==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int dataCount;&lt;br /&gt;
 &amp;lt;float[dataCount] someData&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 26==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
 Vector3  some_vector3;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct spriteData{&lt;br /&gt;
  int   format;&lt;br /&gt;
  float var1;&lt;br /&gt;
  int   num_32767;&lt;br /&gt;
  int   mtlIndex;&lt;br /&gt;
  int   vertsCount;&lt;br /&gt;
  &amp;lt;spriteVertex[vertsCount] verts&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct spriteVertex{&lt;br /&gt;
    Vector2 position;&lt;br /&gt;
    if (inter_format &amp;amp; 2){&lt;br /&gt;
      Vector2 UV;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт. Использует материал с текстурой формата TXR.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Набор спрайтов (31)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  spritePosition?; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.  Использует маску формата MSK, в отличие от типа 28. В Type31Data указаны разные варианты масок, в порядке возрастания разрешения текстуры. Судя по всему, переключение отображаемой маски происходит в зависимости от расстояния до наблюдателя.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер комнаты (41)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int    paramsCount;&lt;br /&gt;
 &amp;lt;int[paramsCount] params&amp;gt;&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё один вариант контейнера комнаты. Поддерживается игрой, но не используется ни в одном из файлов. Параметров не может быть более двух.&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
* На каждую вершину 3D-модели на данном слое UV-развёртки в блоке вершин может приходиться только одна пара UV-координат. Иными словами, недопускается, чтобы одна и та же вершина, используемая в разных треугольниках, имела разные UV-координаты. На каждый островок UV должен приходиться свой набор вершин. Впрочем, данное ограничение можно обойти, указывая индивидуальные координаты вершин каждого треугольника в блоке геометрии. Но в таком случае отражения (см. параметр &amp;quot;env&amp;quot; в [[RES_(формат_файлов)|RES]]) будут рассчитываться не для всей модели, а для каждого треугольника.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5507</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5507"/>
		<updated>2025-10-22T23:08:45Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Контейнер комнаты (41) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура vertsStruct:&lt;br /&gt;
 //В блоке-хранилище вершин переменную vertsStructType следует читать как четыре uint8, тогда:&lt;br /&gt;
 int normals_type = vertsStructType[0]&lt;br /&gt;
 int num_UV       = vertsStructType[1]&lt;br /&gt;
 int some_data1   = vertsStructType[2]&lt;br /&gt;
 int some_data1   = vertsStructType[3]&lt;br /&gt;
 //&lt;br /&gt;
 struct vertsStruct{&lt;br /&gt;
     Vector3 position;&lt;br /&gt;
     Vector2 UV;&lt;br /&gt;
     Vector2 additionalUV[num_UV];&lt;br /&gt;
   &lt;br /&gt;
     if (normals_type == 1 || normals_type == 2){&lt;br /&gt;
         Vector3 normal; //обычная нормаль&lt;br /&gt;
     } else if (normals_type == 3){&lt;br /&gt;
         float normal;   //а в таком случае модель не будет затеняться&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Структура faceStruct:&lt;br /&gt;
 struct faceStruct{&lt;br /&gt;
   int   format;&lt;br /&gt;
   float num_1;&lt;br /&gt;
   int   num_32767;&lt;br /&gt;
   int   mtlIndex;&lt;br /&gt;
   int   indexCount;&lt;br /&gt;
   &amp;lt;faceIndex[indexCount] indexes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct faceIndex{&lt;br /&gt;
     int vertexIndex;&lt;br /&gt;
     if (inter_format &amp;amp; 2){&lt;br /&gt;
         Vector2 UV; //индивидуальная UV для данного полигона&lt;br /&gt;
     }&lt;br /&gt;
     if (inter_format &amp;amp; 0x10){&lt;br /&gt;
         if (inter_format &amp;amp; 0x1){&lt;br /&gt;
             Vector3 intensity_vector; //нормаль&lt;br /&gt;
         } else if (inter_format &amp;amp; 0x20){&lt;br /&gt;
             float intensity_float; //если есть, то затенение не будет использоваться&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  border;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Плоскость border задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09.&lt;br /&gt;
&lt;br /&gt;
Данный контейнер может:&lt;br /&gt;
# Использоваться в качестве ограничителя зоны отрисовки объекта (повсеместно применяется в &amp;quot;Дальнобойщиках 2&amp;quot; в контейнерах коллизии игрового мира). В таком случае отрисовка происходит относительно тангенса, перпендикулярного указанному вектору ''border''&amp;lt;ref&amp;gt;За информацию благодарность LabVaKars&amp;lt;/ref&amp;gt;.&lt;br /&gt;
# Задавать границы события. В таком случае границей события будет сумма всех ''border'' родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_type09_render_tree.jpg|Визуализация зон отрисовки коллизии дорог файла ap.b3d в программе Blender 3.6.23 при помощи плагинов от LabVaKars.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 15==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, структура аналогична блоку типа 16. Не встречается в файлах игры.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 22==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int dataCount;&lt;br /&gt;
 &amp;lt;float[dataCount] someData&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 26==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
 Vector3  some_vector3;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct spriteData{&lt;br /&gt;
  int   format;&lt;br /&gt;
  float var1;&lt;br /&gt;
  int   num_32767;&lt;br /&gt;
  int   mtlIndex;&lt;br /&gt;
  int   vertsCount;&lt;br /&gt;
  &amp;lt;spriteVertex[vertsCount] verts&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct spriteVertex{&lt;br /&gt;
    Vector2 position;&lt;br /&gt;
    if (inter_format &amp;amp; 2){&lt;br /&gt;
      Vector2 UV;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт. Использует материал с текстурой формата TXR.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Набор спрайтов (31)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  spritePosition?; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.  Использует маску формата MSK, в отличие от типа 28. В Type31Data указаны разные варианты масок, в порядке возрастания разрешения текстуры. Судя по всему, переключение отображаемой маски происходит в зависимости от расстояния до наблюдателя.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер комнаты (41)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int    paramsCount;&lt;br /&gt;
 &amp;lt;int[paramsCount] params&amp;gt;&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё один вариант контейнера комнаты. Поддерживается игрой, но не используется ни в одном из файлов. Параметров не может быть более двух.&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
* На каждую вершину 3D-модели на данном слое UV-развёртки в блоке вершин может приходиться только одна пара UV-координат. Иными словами, недопускается, чтобы одна и та же вершина, используемая в разных треугольниках, имела разные UV-координаты. На каждый островок UV должен приходиться свой набор вершин. Впрочем, данное ограничение можно обойти, указывая индивидуальные координаты вершин каждого треугольника в блоке геометрии. Но в таком случае отражения (см. параметр &amp;quot;env&amp;quot; в [[RES_(формат_файлов)|RES]]) будут рассчитываться не для всей модели, а для каждого треугольника.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5506</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5506"/>
		<updated>2025-10-22T23:05:03Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: добавил типы 15, 22, 26 и 41&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура vertsStruct:&lt;br /&gt;
 //В блоке-хранилище вершин переменную vertsStructType следует читать как четыре uint8, тогда:&lt;br /&gt;
 int normals_type = vertsStructType[0]&lt;br /&gt;
 int num_UV       = vertsStructType[1]&lt;br /&gt;
 int some_data1   = vertsStructType[2]&lt;br /&gt;
 int some_data1   = vertsStructType[3]&lt;br /&gt;
 //&lt;br /&gt;
 struct vertsStruct{&lt;br /&gt;
     Vector3 position;&lt;br /&gt;
     Vector2 UV;&lt;br /&gt;
     Vector2 additionalUV[num_UV];&lt;br /&gt;
   &lt;br /&gt;
     if (normals_type == 1 || normals_type == 2){&lt;br /&gt;
         Vector3 normal; //обычная нормаль&lt;br /&gt;
     } else if (normals_type == 3){&lt;br /&gt;
         float normal;   //а в таком случае модель не будет затеняться&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Структура faceStruct:&lt;br /&gt;
 struct faceStruct{&lt;br /&gt;
   int   format;&lt;br /&gt;
   float num_1;&lt;br /&gt;
   int   num_32767;&lt;br /&gt;
   int   mtlIndex;&lt;br /&gt;
   int   indexCount;&lt;br /&gt;
   &amp;lt;faceIndex[indexCount] indexes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct faceIndex{&lt;br /&gt;
     int vertexIndex;&lt;br /&gt;
     if (inter_format &amp;amp; 2){&lt;br /&gt;
         Vector2 UV; //индивидуальная UV для данного полигона&lt;br /&gt;
     }&lt;br /&gt;
     if (inter_format &amp;amp; 0x10){&lt;br /&gt;
         if (inter_format &amp;amp; 0x1){&lt;br /&gt;
             Vector3 intensity_vector; //нормаль&lt;br /&gt;
         } else if (inter_format &amp;amp; 0x20){&lt;br /&gt;
             float intensity_float; //если есть, то затенение не будет использоваться&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  border;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Плоскость border задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09.&lt;br /&gt;
&lt;br /&gt;
Данный контейнер может:&lt;br /&gt;
# Использоваться в качестве ограничителя зоны отрисовки объекта (повсеместно применяется в &amp;quot;Дальнобойщиках 2&amp;quot; в контейнерах коллизии игрового мира). В таком случае отрисовка происходит относительно тангенса, перпендикулярного указанному вектору ''border''&amp;lt;ref&amp;gt;За информацию благодарность LabVaKars&amp;lt;/ref&amp;gt;.&lt;br /&gt;
# Задавать границы события. В таком случае границей события будет сумма всех ''border'' родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_type09_render_tree.jpg|Визуализация зон отрисовки коллизии дорог файла ap.b3d в программе Blender 3.6.23 при помощи плагинов от LabVaKars.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 15==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, структура аналогична блоку типа 16. Не встречается в файлах игры.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 22==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int dataCount;&lt;br /&gt;
 &amp;lt;float[dataCount] someData&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Контейнер типа 26==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
 Vector3  some_vector3;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector1;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct spriteData{&lt;br /&gt;
  int   format;&lt;br /&gt;
  float var1;&lt;br /&gt;
  int   num_32767;&lt;br /&gt;
  int   mtlIndex;&lt;br /&gt;
  int   vertsCount;&lt;br /&gt;
  &amp;lt;spriteVertex[vertsCount] verts&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct spriteVertex{&lt;br /&gt;
    Vector2 position;&lt;br /&gt;
    if (inter_format &amp;amp; 2){&lt;br /&gt;
      Vector2 UV;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт. Использует материал с текстурой формата TXR.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Набор спрайтов (31)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  spritePosition?; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.  Использует маску формата MSK, в отличие от типа 28. В Type31Data указаны разные варианты масок, в порядке возрастания разрешения текстуры. Судя по всему, переключение отображаемой маски происходит в зависимости от расстояния до наблюдателя.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер комнаты (41)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int    paramsCount;&lt;br /&gt;
 &amp;lt;int[paramsCount] params&amp;gt;&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё один вариант контейнера комнаты. Поддерживается игрой, но не используется ни в одном из файлов.&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
* На каждую вершину 3D-модели на данном слое UV-развёртки в блоке вершин может приходиться только одна пара UV-координат. Иными словами, недопускается, чтобы одна и та же вершина, используемая в разных треугольниках, имела разные UV-координаты. На каждый островок UV должен приходиться свой набор вершин. Впрочем, данное ограничение можно обойти, указывая индивидуальные координаты вершин каждого треугольника в блоке геометрии. Но в таком случае отражения (см. параметр &amp;quot;env&amp;quot; в [[RES_(формат_файлов)|RES]]) будут рассчитываться не для всей модели, а для каждого треугольника.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5505</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5505"/>
		<updated>2025-10-20T18:30:38Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Спрайт (31) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура vertsStruct:&lt;br /&gt;
 //В блоке-хранилище вершин переменную vertsStructType следует читать как четыре uint8, тогда:&lt;br /&gt;
 int normals_type = vertsStructType[0]&lt;br /&gt;
 int num_UV       = vertsStructType[1]&lt;br /&gt;
 int some_data1   = vertsStructType[2]&lt;br /&gt;
 int some_data1   = vertsStructType[3]&lt;br /&gt;
 //&lt;br /&gt;
 struct vertsStruct{&lt;br /&gt;
     Vector3 position;&lt;br /&gt;
     Vector2 UV;&lt;br /&gt;
     Vector2 additionalUV[num_UV];&lt;br /&gt;
   &lt;br /&gt;
     if (normals_type == 1 || normals_type == 2){&lt;br /&gt;
         Vector3 normal; //обычная нормаль&lt;br /&gt;
     } else if (normals_type == 3){&lt;br /&gt;
         float normal;   //а в таком случае модель не будет затеняться&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Структура faceStruct:&lt;br /&gt;
 struct faceStruct{&lt;br /&gt;
   int   format;&lt;br /&gt;
   float num_1;&lt;br /&gt;
   int   num_32767;&lt;br /&gt;
   int   mtlIndex;&lt;br /&gt;
   int   indexCount;&lt;br /&gt;
   &amp;lt;faceIndex[indexCount] indexes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct faceIndex{&lt;br /&gt;
     int vertexIndex;&lt;br /&gt;
     if (inter_format &amp;amp; 2){&lt;br /&gt;
         Vector2 UV; //индивидуальная UV для данного полигона&lt;br /&gt;
     }&lt;br /&gt;
     if (inter_format &amp;amp; 0x10){&lt;br /&gt;
         if (inter_format &amp;amp; 0x1){&lt;br /&gt;
             Vector3 intensity_vector; //нормаль&lt;br /&gt;
         } else if (inter_format &amp;amp; 0x20){&lt;br /&gt;
             float intensity_float; //если есть, то затенение не будет использоваться&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  border;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Плоскость border задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09.&lt;br /&gt;
&lt;br /&gt;
Данный контейнер может:&lt;br /&gt;
# Использоваться в качестве ограничителя зоны отрисовки объекта (повсеместно применяется в &amp;quot;Дальнобойщиках 2&amp;quot; в контейнерах коллизии игрового мира). В таком случае отрисовка происходит относительно тангенса, перпендикулярного указанному вектору ''border''&amp;lt;ref&amp;gt;За информацию благодарность LabVaKars&amp;lt;/ref&amp;gt;.&lt;br /&gt;
# Задавать границы события. В таком случае границей события будет сумма всех ''border'' родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_type09_render_tree.jpg|Визуализация зон отрисовки коллизии дорог файла ap.b3d в программе Blender 3.6.23 при помощи плагинов от LabVaKars.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int dataCount;&lt;br /&gt;
 &amp;lt;float[dataCount] someData&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct spriteData{&lt;br /&gt;
  int   format;&lt;br /&gt;
  float var1;&lt;br /&gt;
  int   num_32767;&lt;br /&gt;
  int   mtlIndex;&lt;br /&gt;
  int   vertsCount;&lt;br /&gt;
  &amp;lt;spriteVertex[vertsCount] verts&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct spriteVertex{&lt;br /&gt;
    Vector2 position;&lt;br /&gt;
    if (inter_format &amp;amp; 2){&lt;br /&gt;
      Vector2 UV;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт. Использует материал с текстурой формата TXR.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Набор спрайтов (31)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  spritePosition?; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.  Использует маску формата MSK, в отличие от типа 28. В Type31Data указаны разные варианты масок, в порядке возрастания разрешения текстуры. Судя по всему, переключение отображаемой маски происходит в зависимости от расстояния до наблюдателя.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
* На каждую вершину 3D-модели на данном слое UV-развёртки в блоке вершин может приходиться только одна пара UV-координат. Иными словами, недопускается, чтобы одна и та же вершина, используемая в разных треугольниках, имела разные UV-координаты. На каждый островок UV должен приходиться свой набор вершин. Впрочем, данное ограничение можно обойти, указывая индивидуальные координаты вершин каждого треугольника в блоке геометрии. Но в таком случае отражения (см. параметр &amp;quot;env&amp;quot; в [[RES_(формат_файлов)|RES]]) будут рассчитываться не для всей модели, а для каждого треугольника.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5504</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5504"/>
		<updated>2025-10-20T18:30:22Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Блок типа 31 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура vertsStruct:&lt;br /&gt;
 //В блоке-хранилище вершин переменную vertsStructType следует читать как четыре uint8, тогда:&lt;br /&gt;
 int normals_type = vertsStructType[0]&lt;br /&gt;
 int num_UV       = vertsStructType[1]&lt;br /&gt;
 int some_data1   = vertsStructType[2]&lt;br /&gt;
 int some_data1   = vertsStructType[3]&lt;br /&gt;
 //&lt;br /&gt;
 struct vertsStruct{&lt;br /&gt;
     Vector3 position;&lt;br /&gt;
     Vector2 UV;&lt;br /&gt;
     Vector2 additionalUV[num_UV];&lt;br /&gt;
   &lt;br /&gt;
     if (normals_type == 1 || normals_type == 2){&lt;br /&gt;
         Vector3 normal; //обычная нормаль&lt;br /&gt;
     } else if (normals_type == 3){&lt;br /&gt;
         float normal;   //а в таком случае модель не будет затеняться&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Структура faceStruct:&lt;br /&gt;
 struct faceStruct{&lt;br /&gt;
   int   format;&lt;br /&gt;
   float num_1;&lt;br /&gt;
   int   num_32767;&lt;br /&gt;
   int   mtlIndex;&lt;br /&gt;
   int   indexCount;&lt;br /&gt;
   &amp;lt;faceIndex[indexCount] indexes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct faceIndex{&lt;br /&gt;
     int vertexIndex;&lt;br /&gt;
     if (inter_format &amp;amp; 2){&lt;br /&gt;
         Vector2 UV; //индивидуальная UV для данного полигона&lt;br /&gt;
     }&lt;br /&gt;
     if (inter_format &amp;amp; 0x10){&lt;br /&gt;
         if (inter_format &amp;amp; 0x1){&lt;br /&gt;
             Vector3 intensity_vector; //нормаль&lt;br /&gt;
         } else if (inter_format &amp;amp; 0x20){&lt;br /&gt;
             float intensity_float; //если есть, то затенение не будет использоваться&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  border;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Плоскость border задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09.&lt;br /&gt;
&lt;br /&gt;
Данный контейнер может:&lt;br /&gt;
# Использоваться в качестве ограничителя зоны отрисовки объекта (повсеместно применяется в &amp;quot;Дальнобойщиках 2&amp;quot; в контейнерах коллизии игрового мира). В таком случае отрисовка происходит относительно тангенса, перпендикулярного указанному вектору ''border''&amp;lt;ref&amp;gt;За информацию благодарность LabVaKars&amp;lt;/ref&amp;gt;.&lt;br /&gt;
# Задавать границы события. В таком случае границей события будет сумма всех ''border'' родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_type09_render_tree.jpg|Визуализация зон отрисовки коллизии дорог файла ap.b3d в программе Blender 3.6.23 при помощи плагинов от LabVaKars.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int dataCount;&lt;br /&gt;
 &amp;lt;float[dataCount] someData&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct spriteData{&lt;br /&gt;
  int   format;&lt;br /&gt;
  float var1;&lt;br /&gt;
  int   num_32767;&lt;br /&gt;
  int   mtlIndex;&lt;br /&gt;
  int   vertsCount;&lt;br /&gt;
  &amp;lt;spriteVertex[vertsCount] verts&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct spriteVertex{&lt;br /&gt;
    Vector2 position;&lt;br /&gt;
    if (inter_format &amp;amp; 2){&lt;br /&gt;
      Vector2 UV;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт. Использует материал с текстурой формата TXR.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Спрайт (31)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  spritePosition?; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.  Использует маску формата MSK, в отличие от типа 28. В Type31Data указаны разные варианты масок, в порядке возрастания разрешения текстуры. Судя по всему, переключение отображаемой маски происходит в зависимости от расстояния до наблюдателя.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
* На каждую вершину 3D-модели на данном слое UV-развёртки в блоке вершин может приходиться только одна пара UV-координат. Иными словами, недопускается, чтобы одна и та же вершина, используемая в разных треугольниках, имела разные UV-координаты. На каждый островок UV должен приходиться свой набор вершин. Впрочем, данное ограничение можно обойти, указывая индивидуальные координаты вершин каждого треугольника в блоке геометрии. Но в таком случае отражения (см. параметр &amp;quot;env&amp;quot; в [[RES_(формат_файлов)|RES]]) будут рассчитываться не для всей модели, а для каждого треугольника.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5503</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5503"/>
		<updated>2025-10-20T18:28:20Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Спрайт (28) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура vertsStruct:&lt;br /&gt;
 //В блоке-хранилище вершин переменную vertsStructType следует читать как четыре uint8, тогда:&lt;br /&gt;
 int normals_type = vertsStructType[0]&lt;br /&gt;
 int num_UV       = vertsStructType[1]&lt;br /&gt;
 int some_data1   = vertsStructType[2]&lt;br /&gt;
 int some_data1   = vertsStructType[3]&lt;br /&gt;
 //&lt;br /&gt;
 struct vertsStruct{&lt;br /&gt;
     Vector3 position;&lt;br /&gt;
     Vector2 UV;&lt;br /&gt;
     Vector2 additionalUV[num_UV];&lt;br /&gt;
   &lt;br /&gt;
     if (normals_type == 1 || normals_type == 2){&lt;br /&gt;
         Vector3 normal; //обычная нормаль&lt;br /&gt;
     } else if (normals_type == 3){&lt;br /&gt;
         float normal;   //а в таком случае модель не будет затеняться&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Структура faceStruct:&lt;br /&gt;
 struct faceStruct{&lt;br /&gt;
   int   format;&lt;br /&gt;
   float num_1;&lt;br /&gt;
   int   num_32767;&lt;br /&gt;
   int   mtlIndex;&lt;br /&gt;
   int   indexCount;&lt;br /&gt;
   &amp;lt;faceIndex[indexCount] indexes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct faceIndex{&lt;br /&gt;
     int vertexIndex;&lt;br /&gt;
     if (inter_format &amp;amp; 2){&lt;br /&gt;
         Vector2 UV; //индивидуальная UV для данного полигона&lt;br /&gt;
     }&lt;br /&gt;
     if (inter_format &amp;amp; 0x10){&lt;br /&gt;
         if (inter_format &amp;amp; 0x1){&lt;br /&gt;
             Vector3 intensity_vector; //нормаль&lt;br /&gt;
         } else if (inter_format &amp;amp; 0x20){&lt;br /&gt;
             float intensity_float; //если есть, то затенение не будет использоваться&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  border;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Плоскость border задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09.&lt;br /&gt;
&lt;br /&gt;
Данный контейнер может:&lt;br /&gt;
# Использоваться в качестве ограничителя зоны отрисовки объекта (повсеместно применяется в &amp;quot;Дальнобойщиках 2&amp;quot; в контейнерах коллизии игрового мира). В таком случае отрисовка происходит относительно тангенса, перпендикулярного указанному вектору ''border''&amp;lt;ref&amp;gt;За информацию благодарность LabVaKars&amp;lt;/ref&amp;gt;.&lt;br /&gt;
# Задавать границы события. В таком случае границей события будет сумма всех ''border'' родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_type09_render_tree.jpg|Визуализация зон отрисовки коллизии дорог файла ap.b3d в программе Blender 3.6.23 при помощи плагинов от LabVaKars.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int dataCount;&lt;br /&gt;
 &amp;lt;float[dataCount] someData&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct spriteData{&lt;br /&gt;
  int   format;&lt;br /&gt;
  float var1;&lt;br /&gt;
  int   num_32767;&lt;br /&gt;
  int   mtlIndex;&lt;br /&gt;
  int   vertsCount;&lt;br /&gt;
  &amp;lt;spriteVertex[vertsCount] verts&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct spriteVertex{&lt;br /&gt;
    Vector2 position;&lt;br /&gt;
    if (inter_format &amp;amp; 2){&lt;br /&gt;
      Vector2 UV;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт. Использует материал с текстурой формата TXR.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Блок типа 31==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  some_vector; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, используется для отрисовки деревьев, заданных набором msk-файлов.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
* На каждую вершину 3D-модели на данном слое UV-развёртки в блоке вершин может приходиться только одна пара UV-координат. Иными словами, недопускается, чтобы одна и та же вершина, используемая в разных треугольниках, имела разные UV-координаты. На каждый островок UV должен приходиться свой набор вершин. Впрочем, данное ограничение можно обойти, указывая индивидуальные координаты вершин каждого треугольника в блоке геометрии. Но в таком случае отражения (см. параметр &amp;quot;env&amp;quot; в [[RES_(формат_файлов)|RES]]) будут рассчитываться не для всей модели, а для каждого треугольника.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5502</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5502"/>
		<updated>2025-10-19T18:21:31Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Технические ограничения (Дальнобойщики II) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура vertsStruct:&lt;br /&gt;
 //В блоке-хранилище вершин переменную vertsStructType следует читать как четыре uint8, тогда:&lt;br /&gt;
 int normals_type = vertsStructType[0]&lt;br /&gt;
 int num_UV       = vertsStructType[1]&lt;br /&gt;
 int some_data1   = vertsStructType[2]&lt;br /&gt;
 int some_data1   = vertsStructType[3]&lt;br /&gt;
 //&lt;br /&gt;
 struct vertsStruct{&lt;br /&gt;
     Vector3 position;&lt;br /&gt;
     Vector2 UV;&lt;br /&gt;
     Vector2 additionalUV[num_UV];&lt;br /&gt;
   &lt;br /&gt;
     if (normals_type == 1 || normals_type == 2){&lt;br /&gt;
         Vector3 normal; //обычная нормаль&lt;br /&gt;
     } else if (normals_type == 3){&lt;br /&gt;
         float normal;   //а в таком случае модель не будет затеняться&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Структура faceStruct:&lt;br /&gt;
 struct faceStruct{&lt;br /&gt;
   int   format;&lt;br /&gt;
   float num_1;&lt;br /&gt;
   int   num_32767;&lt;br /&gt;
   int   mtlIndex;&lt;br /&gt;
   int   indexCount;&lt;br /&gt;
   &amp;lt;faceIndex[indexCount] indexes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct faceIndex{&lt;br /&gt;
     int vertexIndex;&lt;br /&gt;
     if (inter_format &amp;amp; 2){&lt;br /&gt;
         Vector2 UV; //индивидуальная UV для данного полигона&lt;br /&gt;
     }&lt;br /&gt;
     if (inter_format &amp;amp; 0x10){&lt;br /&gt;
         if (inter_format &amp;amp; 0x1){&lt;br /&gt;
             Vector3 intensity_vector; //нормаль&lt;br /&gt;
         } else if (inter_format &amp;amp; 0x20){&lt;br /&gt;
             float intensity_float; //если есть, то затенение не будет использоваться&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  border;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Плоскость border задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09.&lt;br /&gt;
&lt;br /&gt;
Данный контейнер может:&lt;br /&gt;
# Использоваться в качестве ограничителя зоны отрисовки объекта (повсеместно применяется в &amp;quot;Дальнобойщиках 2&amp;quot; в контейнерах коллизии игрового мира). В таком случае отрисовка происходит относительно тангенса, перпендикулярного указанному вектору ''border''&amp;lt;ref&amp;gt;За информацию благодарность LabVaKars&amp;lt;/ref&amp;gt;.&lt;br /&gt;
# Задавать границы события. В таком случае границей события будет сумма всех ''border'' родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_type09_render_tree.jpg|Визуализация зон отрисовки коллизии дорог файла ap.b3d в программе Blender 3.6.23 при помощи плагинов от LabVaKars.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int dataCount;&lt;br /&gt;
 &amp;lt;float[dataCount] someData&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct spriteData{&lt;br /&gt;
  int   format;&lt;br /&gt;
  float var1;&lt;br /&gt;
  int   num_32767;&lt;br /&gt;
  int   mtlIndex;&lt;br /&gt;
  int   vertsCount;&lt;br /&gt;
  &amp;lt;spriteVertex[vertsCount] verts&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct spriteVertex{&lt;br /&gt;
    Vector2 position;&lt;br /&gt;
    if (inter_format &amp;amp; 2){&lt;br /&gt;
      Vector2 UV;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Блок типа 31==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  some_vector; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, используется для отрисовки деревьев, заданных набором msk-файлов.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
* На каждую вершину 3D-модели на данном слое UV-развёртки в блоке вершин может приходиться только одна пара UV-координат. Иными словами, недопускается, чтобы одна и та же вершина, используемая в разных треугольниках, имела разные UV-координаты. На каждый островок UV должен приходиться свой набор вершин. Впрочем, данное ограничение можно обойти, указывая индивидуальные координаты вершин каждого треугольника в блоке геометрии. Но в таком случае отражения (см. параметр &amp;quot;env&amp;quot; в [[RES_(формат_файлов)|RES]]) будут рассчитываться не для всей модели, а для каждого треугольника.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%94%D0%B12&amp;diff=5501</id>
		<title>Шаблон:Дб2</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%94%D0%B12&amp;diff=5501"/>
		<updated>2025-10-12T14:54:06Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: добавил раздел про форматы ресурсов игры&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=3 style=&amp;quot;background-color:#D1CCA7&amp;quot;|[[Дальнобойщики 2]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#D1CCA7; text-align:right; width: 15%&amp;quot;|'''''Игровое наполнение'''''&lt;br /&gt;
|[[Игровой регион (Дальнобойщики 2)|Игровой регион]] • [[Автопарк_(Дальнобойщики_2)|Автопарк]] • [[Саундтрек_(Дальнобойщики_2)|Саундтрек]] • [[Вступительный_ролик_(Дальнобойщики_2)|Вступительный ролик]] • [[Рация]] • [[Милиция]] • [[КА-50|Вертолёт]]&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot; style=&amp;quot;width: 10%&amp;quot;|&lt;br /&gt;
[[Файл:Дб2t.jpg|160px|безрамки|центр]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#D1CCA7; text-align:right&amp;quot;|'''''Моддинг'''''&lt;br /&gt;
|[[Модификации_(Дальнобойщики_2)|Модификации]] • [[Утилиты_(Дальнобойщики_2)|Утилиты]] • [[Truck.ini_(Дальнобойщики_2)|truck.ini]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#D1CCA7; text-align:right&amp;quot;|'''''Форматы ресурсов'''''&lt;br /&gt;
|[[B3D_(формат_файлов)|B3D]] • [[OVL_(формат_файлов)|OVL]] • [[RES_(формат_файлов)|RES]] • [[game.cnf]] • [[sch-файлы]] • [[vehicle.tech]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#D1CCA7; text-align:right&amp;quot;|'''''Разное'''''&lt;br /&gt;
|[[История_версий_(Дальнобойщики_2)|История версий]] •  [[Советы_и_секреты_(Дальнобойщики_2)|Советы и секреты]] • [[Бонусный диск]] • [[Управление_(Дальнобойщики_2)|Управление]]  • [[Авторы (Дальнобойщики 2)|Авторы]]&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
==Код для вставки==&lt;br /&gt;
&amp;lt;pre&amp;gt;{{Дб2}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=%D0%A3%D1%82%D0%B8%D0%BB%D0%B8%D1%82%D1%8B_(%D0%94%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B1%D0%BE%D0%B9%D1%89%D0%B8%D0%BA%D0%B8_2)&amp;diff=5500</id>
		<title>Утилиты (Дальнобойщики 2)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=%D0%A3%D1%82%D0%B8%D0%BB%D0%B8%D1%82%D1%8B_(%D0%94%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B1%D0%BE%D0%B9%D1%89%D0%B8%D0%BA%D0%B8_2)&amp;diff=5500"/>
		<updated>2025-10-12T14:46:47Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: добавил ссылку на плагины от LabVaKars&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг_(Дальнобойщики_2)]]&lt;br /&gt;
'''На данной странице представлены утилиты для работы с игровыми форматами игры [[Дальнобойщики 2]].'''&lt;br /&gt;
&lt;br /&gt;
== Работа с архивами ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Название !! Предназначение !! Автор !! Скачать&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15%&amp;quot;| D2Archiver ||style=&amp;quot;width: 45%&amp;quot;| Распаковка и запаковка RES-архивов (за исключением load.res) ||style=&amp;quot;width: 15%&amp;quot;| Maxus || '''[https://drive.google.com/open?id=10fYCDQWoJ0KtBC8tbMDxKK8ioN9W6dkm Скачать (Google Drive, 160KB, EXE)]''' Ссылка обновлена! &amp;lt;br&amp;gt;'''[https://drive.google.com/open?id=10w4xqr5KASfQ7DlVQMQ39XJ4kyjXM027 Другая версия]'''&amp;lt;br&amp;gt;''Для работы требует Распространяемый пакет Visual C++ для Visual Studio 2012, [http://www.microsoft.com/ru-ru/download/details.aspx?id=30679 можно скачать здесь]. Если даже после установки пакета программа требует библиотеку msvcr71.dll, можно попробовать воспользоваться [https://mega.nz/file/uUE1waqC#JW6cxKR5fmkWpejEOHgLeVpsx_xGPqmgoNyXZbi_8W0 данной версией]''&lt;br /&gt;
|-&lt;br /&gt;
| D2 Resource Manager || Просмотр и экспорт содержимого RES и B3D архивов. Положить EXE файл программы в директорию с B3D файлами и перетащить один из файлов на иконку программы.  || [[Участник:BoPoH|BoPoH]]  || '''[https://yadi.sk/d/EUhVwZ0f-djqJw Скачать]''' '''[https://drive.google.com/open?id=10rN_Wb57yM8w2r5QSv2dVbRH3Iuy5fH5 Зеркало]'''&lt;br /&gt;
|-&lt;br /&gt;
| HT2-ResHack || Просмотр и экспорт содержимого RES архивов || 600fpt / Bokehlicia / Unstruckt || '''[https://drive.google.com/open?id=11-x8Snarl1j2AxhXJ0PSQUogJLIU86Pq Скачать]'''&lt;br /&gt;
|-&lt;br /&gt;
| Плагины для Noesis || Просмотр [[Алмазный#Ландшафт_пустыни_при_Алмазном | карты высот]], запаковка/распаковка .res/.rmp, импорт/экспорт текстур (.txr и .msk) || AlexKimov || '''[https://www.moddb.com/games/hard-truck-2/downloads/hard-truck-2-ktr-plugins-for-noesis-v02 moddb.com]'''&lt;br /&gt;
|-&lt;br /&gt;
| RnR RES Editor || Извлечение текстур из RES-файлов || BoPoH || '''[https://drive.google.com/file/d/1-ErsOfBaV0T_rtqDSfRoivxPKAvjs2RA/view Google Drive]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Редактирование моделей ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Название !! Предназначение !! Автор !! Скачать&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15%&amp;quot;| B3D Block Editor||style=&amp;quot;width: 45%&amp;quot;| Просмотр структуры b3d, работа с его содержимым ||style=&amp;quot;width: 15%&amp;quot;| Duude92 и aleko2144, https://vk.com/rnr_mods || '''[https://vk.com/wall-157113673_4880 Описание и ссылки для скачивания]'''&amp;lt;br&amp;gt;'''[https://onedrive.live.com/?authkey=%21AIn-JFCfVUVjuDQ&amp;amp;id=A771E0923FBA1E05%216133&amp;amp;cid=A771E0923FBA1E05 Старые версии]'''&lt;br /&gt;
|-&lt;br /&gt;
| Плагины для Blender 2.79 || Экспорт [[B3D_(формат_файлов)|b3d]] и way, частичный импорт файлов указанного формата || Duude92 и aleko2144 || '''[https://github.com/aleko2144/Hard-Truck-1-2-Blender-plugins Скачать]'''&lt;br /&gt;
|-&lt;br /&gt;
| Плагины для Blender 3.6 || Полноценный импорт/экспорт [[B3D_(формат_файлов)|b3d]], [[RES_(формат_файлов)|res]] и way || LabVaKars, Duude92, aleko2144 || '''[https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins Скачать]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Редактирование sch/cnf-файлов ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Название !! Предназначение !! Автор !! Скачать&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15%&amp;quot;| RnRSchExtractor ||style=&amp;quot;width: 45%&amp;quot;| Программа для дешифрации и шифрации [[Sch-файлы|sch]] и cnf-файлов.  ||style=&amp;quot;width: 15%&amp;quot;| [[Участник:BoPoH|BoPoH]] || '''[https://yadi.sk/d/Qxm4wylWoPXJFw Скачать]'''&amp;lt;br/&amp;gt;Антивирус может блокировать работу программы - добавьте её в исключения [https://www.virustotal.com/ru/file/0f1b7ab1456b2c1b29b8a24c738ffc36b5be4cfd4cd65f33084a17df07ce5218/analysis/ (данные VirusTotal)].&lt;br /&gt;
|-&lt;br /&gt;
| Дешифратор/шифратор sch || Программа для дешифрации и шифрации sch и cnf-файлов.  || Duude92 и aleko2144 || '''[https://vk.com/page-157113673_53285850 Инструкция по применению и ссылка на скачивание]'''&amp;lt;br&amp;gt;''Для работы требуется среда Python 3.6, [https://www.python.org/ftp/python/3.6.0/python-3.6.0-amd64.exe можно скачать здесь (x86-64)]''.&lt;br /&gt;
|-&lt;br /&gt;
| sch tool || Программа для дешифрации и шифрации sch и cnf-файлов. || Duude92, AlexKimov, aleko2144 || '''[https://vk.com/rnr_mods?w=page-157113673_54190358 Инструкция по применению и ссылка на скачивание]'''.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Разное ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Название !! Предназначение !! Автор !! Скачать&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 15%&amp;quot;| D2 Tech Editor ||style=&amp;quot;width: 45%&amp;quot;| Программа для редактирования [[vehicle.tech]] ||style=&amp;quot;width: 15%&amp;quot;|[[Участник:BoPoH|BoPoH]] || '''[https://yadi.sk/d/XMX_CYh2L-7R2w Скачать]'''&lt;br /&gt;
|-&lt;br /&gt;
| Tools || Описание форматов файлов игр Дальнобойщики 1, Дальнобойщики 2 и Дальнобойщики 3, скрипты для работы с форматами || AlexKimov || '''[https://github.com/AlexKimov/HardTruck-RignRoll-file-formats Github]'''&lt;br /&gt;
|-&lt;br /&gt;
| KOTRunity || Загрузчик ресурсов игры для Unity || Duude92, aleko2144|| '''[https://github.com/Duude92/KOTRunity Github]''' '''[https://vk.com/wall-157113673_1163 vk.com]'''&lt;br /&gt;
|}&lt;br /&gt;
{{Дб2}}&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5499</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5499"/>
		<updated>2025-10-08T18:50:54Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Контейнер (09) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура vertsStruct:&lt;br /&gt;
 //В блоке-хранилище вершин переменную vertsStructType следует читать как четыре uint8, тогда:&lt;br /&gt;
 int normals_type = vertsStructType[0]&lt;br /&gt;
 int num_UV       = vertsStructType[1]&lt;br /&gt;
 int some_data1   = vertsStructType[2]&lt;br /&gt;
 int some_data1   = vertsStructType[3]&lt;br /&gt;
 //&lt;br /&gt;
 struct vertsStruct{&lt;br /&gt;
     Vector3 position;&lt;br /&gt;
     Vector2 UV;&lt;br /&gt;
     Vector2 additionalUV[num_UV];&lt;br /&gt;
   &lt;br /&gt;
     if (normals_type == 1 || normals_type == 2){&lt;br /&gt;
         Vector3 normal; //обычная нормаль&lt;br /&gt;
     } else if (normals_type == 3){&lt;br /&gt;
         float normal;   //а в таком случае модель не будет затеняться&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Структура faceStruct:&lt;br /&gt;
 struct faceStruct{&lt;br /&gt;
   int   format;&lt;br /&gt;
   float num_1;&lt;br /&gt;
   int   num_32767;&lt;br /&gt;
   int   mtlIndex;&lt;br /&gt;
   int   indexCount;&lt;br /&gt;
   &amp;lt;faceIndex[indexCount] indexes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct faceIndex{&lt;br /&gt;
     int vertexIndex;&lt;br /&gt;
     if (inter_format &amp;amp; 2){&lt;br /&gt;
         Vector2 UV; //индивидуальная UV для данного полигона&lt;br /&gt;
     }&lt;br /&gt;
     if (inter_format &amp;amp; 0x10){&lt;br /&gt;
         if (inter_format &amp;amp; 0x1){&lt;br /&gt;
             Vector3 intensity_vector; //нормаль&lt;br /&gt;
         } else if (inter_format &amp;amp; 0x20){&lt;br /&gt;
             float intensity_float; //если есть, то затенение не будет использоваться&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  border;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Плоскость border задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09.&lt;br /&gt;
&lt;br /&gt;
Данный контейнер может:&lt;br /&gt;
# Использоваться в качестве ограничителя зоны отрисовки объекта (повсеместно применяется в &amp;quot;Дальнобойщиках 2&amp;quot; в контейнерах коллизии игрового мира). В таком случае отрисовка происходит относительно тангенса, перпендикулярного указанному вектору ''border''&amp;lt;ref&amp;gt;За информацию благодарность LabVaKars&amp;lt;/ref&amp;gt;.&lt;br /&gt;
# Задавать границы события. В таком случае границей события будет сумма всех ''border'' родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_type09_render_tree.jpg|Визуализация зон отрисовки коллизии дорог файла ap.b3d в программе Blender 3.6.23 при помощи плагинов от LabVaKars.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int dataCount;&lt;br /&gt;
 &amp;lt;float[dataCount] someData&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct spriteData{&lt;br /&gt;
  int   format;&lt;br /&gt;
  float var1;&lt;br /&gt;
  int   num_32767;&lt;br /&gt;
  int   mtlIndex;&lt;br /&gt;
  int   vertsCount;&lt;br /&gt;
  &amp;lt;spriteVertex[vertsCount] verts&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct spriteVertex{&lt;br /&gt;
    Vector2 position;&lt;br /&gt;
    if (inter_format &amp;amp; 2){&lt;br /&gt;
      Vector2 UV;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Блок типа 31==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  some_vector; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, используется для отрисовки деревьев, заданных набором msk-файлов.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:B3d_type09_render_tree.jpg&amp;diff=5498</id>
		<title>Файл:B3d type09 render tree.jpg</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:B3d_type09_render_tree.jpg&amp;diff=5498"/>
		<updated>2025-10-08T18:49:54Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5497</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5497"/>
		<updated>2025-10-07T17:01:47Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Некоторые общие используемые структуры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура vertsStruct:&lt;br /&gt;
 //В блоке-хранилище вершин переменную vertsStructType следует читать как четыре uint8, тогда:&lt;br /&gt;
 int normals_type = vertsStructType[0]&lt;br /&gt;
 int num_UV       = vertsStructType[1]&lt;br /&gt;
 int some_data1   = vertsStructType[2]&lt;br /&gt;
 int some_data1   = vertsStructType[3]&lt;br /&gt;
 //&lt;br /&gt;
 struct vertsStruct{&lt;br /&gt;
     Vector3 position;&lt;br /&gt;
     Vector2 UV;&lt;br /&gt;
     Vector2 additionalUV[num_UV];&lt;br /&gt;
   &lt;br /&gt;
     if (normals_type == 1 || normals_type == 2){&lt;br /&gt;
         Vector3 normal; //обычная нормаль&lt;br /&gt;
     } else if (normals_type == 3){&lt;br /&gt;
         float normal;   //а в таком случае модель не будет затеняться&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Структура faceStruct:&lt;br /&gt;
 struct faceStruct{&lt;br /&gt;
   int   format;&lt;br /&gt;
   float num_1;&lt;br /&gt;
   int   num_32767;&lt;br /&gt;
   int   mtlIndex;&lt;br /&gt;
   int   indexCount;&lt;br /&gt;
   &amp;lt;faceIndex[indexCount] indexes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct faceIndex{&lt;br /&gt;
     int vertexIndex;&lt;br /&gt;
     if (inter_format &amp;amp; 2){&lt;br /&gt;
         Vector2 UV; //индивидуальная UV для данного полигона&lt;br /&gt;
     }&lt;br /&gt;
     if (inter_format &amp;amp; 0x10){&lt;br /&gt;
         if (inter_format &amp;amp; 0x1){&lt;br /&gt;
             Vector3 intensity_vector; //нормаль&lt;br /&gt;
         } else if (inter_format &amp;amp; 0x20){&lt;br /&gt;
             float intensity_float; //если есть, то затенение не будет использоваться&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventBorder;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер события. Плоскость eventBorder задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09. Границей события является сумма всех границ eventBorder родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int dataCount;&lt;br /&gt;
 &amp;lt;float[dataCount] someData&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct spriteData{&lt;br /&gt;
  int   format;&lt;br /&gt;
  float var1;&lt;br /&gt;
  int   num_32767;&lt;br /&gt;
  int   mtlIndex;&lt;br /&gt;
  int   vertsCount;&lt;br /&gt;
  &amp;lt;spriteVertex[vertsCount] verts&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct spriteVertex{&lt;br /&gt;
    Vector2 position;&lt;br /&gt;
    if (inter_format &amp;amp; 2){&lt;br /&gt;
      Vector2 UV;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Блок типа 31==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  some_vector; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, используется для отрисовки деревьев, заданных набором msk-файлов.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5496</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5496"/>
		<updated>2025-10-07T16:40:06Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: добавил структуры 28-го типа&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventBorder;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер события. Плоскость eventBorder задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09. Границей события является сумма всех границ eventBorder родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int dataCount;&lt;br /&gt;
 &amp;lt;float[dataCount] someData&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct spriteData{&lt;br /&gt;
  int   format;&lt;br /&gt;
  float var1;&lt;br /&gt;
  int   num_32767;&lt;br /&gt;
  int   mtlIndex;&lt;br /&gt;
  int   vertsCount;&lt;br /&gt;
  &amp;lt;spriteVertex[vertsCount] verts&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 int inter_format = format ^ 1&lt;br /&gt;
 struct spriteVertex{&lt;br /&gt;
    Vector2 position;&lt;br /&gt;
    if (inter_format &amp;amp; 2){&lt;br /&gt;
      Vector2 UV;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Блок типа 31==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  some_vector; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, используется для отрисовки деревьев, заданных набором msk-файлов.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5495</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5495"/>
		<updated>2025-10-07T16:32:12Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventBorder;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер события. Плоскость eventBorder задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09. Границей события является сумма всех границ eventBorder родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int dataCount;&lt;br /&gt;
 &amp;lt;float[dataCount] someData&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct collisionPolygon {&lt;br /&gt;
     int vertsCount;&lt;br /&gt;
     &amp;lt;Vector3[vertsCount] data&amp;gt;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Блок типа 31==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  some_vector; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, используется для отрисовки деревьев, заданных набором msk-файлов.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Type34Data[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 struct Type34Data{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5494</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5494"/>
		<updated>2025-10-07T16:29:25Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Некоторые используемые структуры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые общие используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector3fi{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventBorder;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер события. Плоскость eventBorder задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09. Границей события является сумма всех границ eventBorder родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int dataCount;&lt;br /&gt;
 &amp;lt;float[dataCount] someData&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Блок типа 31==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  some_vector; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, используется для отрисовки деревьев, заданных набором msk-файлов.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Vector3fi[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5493</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5493"/>
		<updated>2025-10-07T16:28:50Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Геометрия коллизии (23) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector3fi{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventBorder;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер события. Плоскость eventBorder задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09. Границей события является сумма всех границ eventBorder родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
 int some_value1;&lt;br /&gt;
 int collisionType;&lt;br /&gt;
 int dataCount;&lt;br /&gt;
 &amp;lt;float[dataCount] someData&amp;gt;&lt;br /&gt;
 int polyCount;&lt;br /&gt;
 &amp;lt;collisionPolygon[polyCount] polygons&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Трёхмерная коллизия.&lt;br /&gt;
&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Блок типа 31==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  some_vector; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, используется для отрисовки деревьев, заданных набором msk-файлов.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Vector3fi[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5492</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5492"/>
		<updated>2025-10-07T16:25:24Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Звуковой объект (25) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector3fi{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventBorder;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер события. Плоскость eventBorder задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09. Границей события является сумма всех границ eventBorder родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Источник звука (25)==&lt;br /&gt;
 int num32767;&lt;br /&gt;
 int num2;&lt;br /&gt;
 int num256;&lt;br /&gt;
 char[32] soundName;&lt;br /&gt;
 Vector3 soundPosition;&lt;br /&gt;
 float some_value4;&lt;br /&gt;
 float some_value5;&lt;br /&gt;
 float some_value6;&lt;br /&gt;
 float _2xPI;&lt;br /&gt;
 float _PI;&lt;br /&gt;
 float some_value9;&lt;br /&gt;
 float soundRadius;&lt;br /&gt;
 float soundVolume;&lt;br /&gt;
&lt;br /&gt;
Источник трёхмерного звука.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Блок типа 31==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  some_vector; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, используется для отрисовки деревьев, заданных набором msk-файлов.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Vector3fi[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5491</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5491"/>
		<updated>2025-10-07T16:20:02Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector3fi{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
 struct Type31data {&lt;br /&gt;
     float blendValue;&lt;br /&gt;
     int maskID;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventBorder;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер события. Плоскость eventBorder задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09. Границей события является сумма всех границ eventBorder родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Звуковой объект (25)==&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)&amp;lt;ref&amp;gt;https://github.com/LabVaKars/Hard-Truck-1-2-Blender-plugins/blob/master/src/addons/b3d_tools/b3d/import_b3d.py&amp;lt;/ref&amp;gt;==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Блок типа 31==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  some_vector; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, используется для отрисовки деревьев, заданных набором msk-файлов.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Vector3fi[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5490</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5490"/>
		<updated>2025-10-07T16:18:38Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Блок типа 31 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector3fi{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventBorder;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер события. Плоскость eventBorder задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09. Границей события является сумма всех границ eventBorder родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Звуковой объект (25)==&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Блок типа 31==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 Vector4  objectPosition&lt;br /&gt;
 int      some_int;&lt;br /&gt;
 Vector3  some_vector; &lt;br /&gt;
 &amp;lt;Type31Data [dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Предположительно, используется для отрисовки деревьев, заданных набором msk-файлов.&lt;br /&gt;
&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Vector3fi[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5489</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5489"/>
		<updated>2025-10-07T16:08:52Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Блок типа 29 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector3fi{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventBorder;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер события. Плоскость eventBorder задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09. Границей события является сумма всех границ eventBorder родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Звуковой объект (25)==&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель LOD (29)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 &amp;lt;float[groupsCount] groups_render_distances&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расширенный контейнер LOD. Имеет неограниченное количество групп, для каждой из которых можно задать предельное расстояние отрисовки.&lt;br /&gt;
&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Блок типа 31==&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Vector3fi[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5488</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5488"/>
		<updated>2025-10-07T16:03:51Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Блок типа 28 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector3fi{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventBorder;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер события. Плоскость eventBorder задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09. Границей события является сумма всех границ eventBorder родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Звуковой объект (25)==&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Спрайт (28)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      data_count;&lt;br /&gt;
 &amp;lt;spriteData[data_count]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Трёхмерный спрайт.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 29==&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Блок типа 31==&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Vector3fi[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5487</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5487"/>
		<updated>2025-10-07T15:59:02Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Блок типа 27 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector3fi{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventBorder;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер события. Плоскость eventBorder задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09. Границей события является сумма всех границ eventBorder родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Звуковой объект (25)==&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 Vector3  some_vector;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
&lt;br /&gt;
==Блок типа 28==&lt;br /&gt;
==Блок типа 29==&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Блок типа 31==&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Vector3fi[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5486</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5486"/>
		<updated>2025-10-07T15:56:03Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Ломанная линия коллизии (20) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector3fi{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventBorder;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер события. Плоскость eventBorder задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09. Границей события является сумма всех границ eventBorder родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов. Имеет неограниченную высоту.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Звуковой объект (25)==&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
==Блок типа 28==&lt;br /&gt;
==Блок типа 29==&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Блок типа 31==&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Vector3fi[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5485</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5485"/>
		<updated>2025-10-07T15:55:30Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: /* Ломанная линия коллизии (20) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector3fi{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventBorder;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер события. Плоскость eventBorder задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09. Границей события является сумма всех границ eventBorder родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      pointsCount;&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
 int      some_value3;&lt;br /&gt;
 &amp;lt;float[some_value3]&amp;gt;&lt;br /&gt;
 &amp;lt;vertsSimple[pointsCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вертикальная коллизия, заданная ломанной линией. Используется для ограждения заборов и лесов.&lt;br /&gt;
&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Звуковой объект (25)==&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
==Блок типа 28==&lt;br /&gt;
==Блок типа 29==&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Блок типа 31==&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Vector3fi[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
	<entry>
		<id>https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5484</id>
		<title>B3D (формат файлов)</title>
		<link rel="alternate" type="text/html" href="https://rnr-wiki.ru/index.php?title=B3D_(%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2)&amp;diff=5484"/>
		<updated>2025-10-07T15:50:46Z</updated>

		<summary type="html">&lt;p&gt;Aleko 2144: добавил 16 и 17 блоки (знать бы ещё, что это такое)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дальнобойщики_2]]&lt;br /&gt;
[[Категория:Моддинг (Дальнобойщики 2)]]&lt;br /&gt;
Описание формата *.b3d игр [[Дальнобойщики: Путь к победе]] и [[Дальнобойщики 2]].&lt;br /&gt;
Данный формат представляет собой трёхмерную сцену с различными типами объектов: контейнерами, переключателями, триггерами, источниками освещения, геометрией и т.п.&amp;lt;ref&amp;gt;https://github.com/AlexKimov/HardTruck-RignRoll-file-formats/wiki/b3D-File-Format-Rus&amp;lt;/ref&amp;gt;. Инструменты для работы с B3D представлены на странице с [[Утилиты_(Дальнобойщики_2) |утилитами]].&lt;br /&gt;
Сам формат, предположительно, создан в первой половине 90-х годов ХХ века.&lt;br /&gt;
&lt;br /&gt;
=Общее описание структуры файла=&lt;br /&gt;
Формат b3d разделен на 3 основные секции:&lt;br /&gt;
 &amp;lt;заголовок&amp;gt;&lt;br /&gt;
 &amp;lt;список материалов&amp;gt;&lt;br /&gt;
 &amp;lt;блоки данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Общее описание блока данных==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор начала блока&lt;br /&gt;
|-&lt;br /&gt;
| char[32] || Имя блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Тип блока&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;данные&amp;gt; || Данные блока&lt;br /&gt;
|-&lt;br /&gt;
| int32 || Идентификатор конца блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Числовые идентификаторы==&lt;br /&gt;
Располагаются в начале и конце каждого экземпляра блока, а также в начале и конце блока данных b3d-файла (см. общее описание структуры файла). Представляют собой int32. При редактировании файлов в hex-редакторе удобно знать строковое представление данных идентификаторов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! значение int32 !! строковый вид в кодировке 1251 !! описание&lt;br /&gt;
|-&lt;br /&gt;
| 111 || &amp;quot;o...&amp;quot; || Начало секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 222 || &amp;quot;Ю...&amp;quot; || Конец секции с блоками данных&lt;br /&gt;
|-&lt;br /&gt;
| 333 || &amp;quot;M ..&amp;quot; || Начало одного блока&lt;br /&gt;
|-&lt;br /&gt;
| 444 || &amp;quot;j ..&amp;quot; || Разделитель переключаемых блоков (маркер окончания переключаемой группы)&lt;br /&gt;
|-&lt;br /&gt;
| 555 || &amp;quot;+_..&amp;quot; || Конец одного блока&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Заголовок==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание !! значение по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
| char[4] || сигнатура файла || &amp;quot;b3d&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер файла в байтах ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции со списком используемых материалов ] / 4 || 6&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции со списком материалов (1ая секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Смещение секции с блоками данных (третья секция) ] / 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| int32  || [ Размер секции с блоками данных (третья секция) в байтах ] / 4 ||&lt;br /&gt;
|}&lt;br /&gt;
==Список материалов==&lt;br /&gt;
Представляет собой массив имён материалов из [[RES_(формат_файлов)|RES-файла]]. Порядок и имена должны соответствовать RES.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип данных !! описание&lt;br /&gt;
|-&lt;br /&gt;
| int32 || количество материалов&lt;br /&gt;
|-&lt;br /&gt;
| массив char[32] || имя материала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Структуры и описания объектов=&lt;br /&gt;
Структуры даны в синтаксисе C++.&lt;br /&gt;
==Некоторые используемые структуры==&lt;br /&gt;
 struct Vector3{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector3fi{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     int   var;&lt;br /&gt;
 };&lt;br /&gt;
 struct Vector4{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float w;&lt;br /&gt;
 };&lt;br /&gt;
 struct vertsSimple{&lt;br /&gt;
     float x;&lt;br /&gt;
     float y;&lt;br /&gt;
     float z;&lt;br /&gt;
     float u;&lt;br /&gt;
     float v;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
==Терминология и пояснения==&lt;br /&gt;
=== Группа переключаемого контейнера ===&lt;br /&gt;
Переключаемые группы - это дочерние объекты у переключаемого контейнера, разделённые идентификатором int32=444 (в текстовом виде - &amp;quot;j ..&amp;quot;). Например, в некотором контейнере в B3D записаны следующие объекты:&lt;br /&gt;
 object0_0&lt;br /&gt;
 object0_1&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object1_0&lt;br /&gt;
 &amp;lt;j ..&amp;gt;&lt;br /&gt;
 object2_0&lt;br /&gt;
В таком случае, первой переключаемой группой будут object0_0 и object0_1, второй группой object1_0, а третьей группой object2_0.&amp;lt;/br&amp;gt;&lt;br /&gt;
* В конце последней группы идентификатор 333 не ставится. Кроме того, группы могут быть пустыми, то есть не содержать никаких объектов.&amp;lt;/br&amp;gt;&lt;br /&gt;
* Переключаемые группы есть только у объектов типа 10, 21 и (возможно) 24.&lt;br /&gt;
&lt;br /&gt;
==Замечания по структурам==&lt;br /&gt;
* Параметр nodePosition у объектов никак не влияет на их позицию! Скорее всего, он нужен лишь для оптимизации отрисовки.&lt;br /&gt;
* Поиск объектов, указанных в текстовых полях (linkedObject, spaceObject и т.п.) происходит во всех загруженных в память b3d-файлах. То есть допускается давать в одном b3d-файле ссылки на объекты из другого b3d.&lt;br /&gt;
* В игре «Дальнобойщики: Путь к победе» было только 30 типов объектов. К выходу «Дальнобойщиков 2» их количество было увеличено до 40.&lt;br /&gt;
&lt;br /&gt;
==Блок (00)==&lt;br /&gt;
 char[32] some_name&lt;br /&gt;
 Vector3  some_position&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Обычно расположен сразу после списка материалов в любом b3d-файле.&lt;br /&gt;
==Обозреватель (01)==&lt;br /&gt;
 char[32] start_space&lt;br /&gt;
 char[32] start_room&lt;br /&gt;
&lt;br /&gt;
Обозреватель (Viewer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| start_space || имя локатора типа 24, задаёт начальные позицию и вращение обозревателя&lt;br /&gt;
|-&lt;br /&gt;
| start_room || имя комнаты типа 19, в которой будет создан обозреватель&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Контейнер (02)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 Vector4 unknown;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с неизвестными параметрами.&lt;br /&gt;
==Контейнер (03)==&lt;br /&gt;
 Vector4 nodePosition;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Простой контейнер.&lt;br /&gt;
==Контейнер (04)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с возможностью его прямой привязки к другому объекту: в spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер (05)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер. Параметр linkedObject аналогично типу 04.&lt;br /&gt;
==Контейнер-блок вершин (06)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] eventObject?;&lt;br /&gt;
 char[32] parentObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Скорее всего, как-то используется в связке с блоками событий.&lt;br /&gt;
==Контейнер-блок вершин (07)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 int      vertexCount;&lt;br /&gt;
 &amp;lt;vertsSimple[vertexCount]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе простые вершины (XYZ+UV). Параметр spaceObject задаёт локатор, к которому привязан данный 3D-объект.&lt;br /&gt;
==Блок геометрии (08)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 08, при отрисовке имеет плоское затенение (&amp;quot;flat shading&amp;quot;).&lt;br /&gt;
==Контейнер (09)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventBorder;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер события. Плоскость eventBorder задаётся нормальным вектором и его длиной (она может быть отрицательной). Внутри контейнера данного типа могут быть и другие объекты типа 09. Границей события является сумма всех границ eventBorder родительских контейнеров по отношению к триггеру типа 13.&lt;br /&gt;
==Контейнер-переключатель LOD (10)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  LOD_xyzw;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер LOD. Имеет две переключаемые группы. В первой расположены объекты, отрисовываемые в том случае, когда расстояние от LOD_xyz до наблюдателя меньше w. В противном случае будет отображаться вторая группа.&lt;br /&gt;
==Контейнер (11)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector1;&lt;br /&gt;
 Vector4  some_vector2;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер неизвестного назначения. Встречается в старых b3d, например, в MirDemo.&lt;br /&gt;
==Плоскость коллизии (12)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  collisionPlane;&lt;br /&gt;
 int      unknown;&lt;br /&gt;
 int      collisionType;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плоскость коллизии (аналогична CollisionPlane из tech-файла). Определяется нормальным вектором и его длиной (она может быть отрицательной). Границей данной коллизии являются точки пересечений с другими объектами коллизии.&lt;br /&gt;
==Триггер (13)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-триггер.&lt;br /&gt;
&lt;br /&gt;
===Типы триггера===&lt;br /&gt;
====no_rain_no_sun (22)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 22&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====weather_change (23)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 23&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || индекс варианта погоды из weather.ini&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 4&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: плоскость, заданная нормальным вектором и длиной, определяющая границу смены погоды.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| Vector3 || direction || нормальный вектор&lt;br /&gt;
|-&lt;br /&gt;
| float || length || длина вектора&lt;br /&gt;
|}&lt;br /&gt;
====Загрузка модуля (4095)====&lt;br /&gt;
Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 4095&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 1&lt;br /&gt;
|}&lt;br /&gt;
Параметры события:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! тип !! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| char[2] || moduleName || имя модуля из папки ENV&lt;br /&gt;
|-&lt;br /&gt;
| byte || нулевой байт || 0x00&lt;br /&gt;
|-&lt;br /&gt;
| byte || закрывающий байт || 0xCD&lt;br /&gt;
|}&lt;br /&gt;
==Событие (14)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  eventPosition;&lt;br /&gt;
 int      eventType;&lt;br /&gt;
 int      eventValue;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_события[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик событий.&lt;br /&gt;
&lt;br /&gt;
===Типы событий===&lt;br /&gt;
====sell_&amp;lt;vehicle&amp;gt; (18)====&lt;br /&gt;
Как-то связан с продажей автомобиля. Имеется только у автомобилей, доступных для заказа по рации(?)&lt;br /&gt;
Расположен внутри главного контейнера автомобиля. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 18&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
====Nek_&amp;lt;vehicle&amp;gt; (25)====&lt;br /&gt;
Без него сцепка полуприцепа неработоспособна. Значение eventPosition должно соответствовать параметру topSaddle данного полуприцепа в vehicle.tech!&lt;br /&gt;
Расположен внутри главного контейнера полуприцепа. Параметры блока:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! значение&lt;br /&gt;
|-&lt;br /&gt;
| eventType || 25&lt;br /&gt;
|-&lt;br /&gt;
| eventValue || 0&lt;br /&gt;
|-&lt;br /&gt;
| paramsNum || 0&lt;br /&gt;
|}&lt;br /&gt;
Параметры события: отсутствуют.&lt;br /&gt;
==Блок типа 16==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 17.&lt;br /&gt;
==Блок типа 17==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector3  some_data[3];&lt;br /&gt;
 int      some_value1;&lt;br /&gt;
 int      some_value2;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно. Структура аналогична блоку типа 16.&lt;br /&gt;
==Блок-связка (18)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
&lt;br /&gt;
Используется для добавления копий объектов. В spaceObject указывается имя блока-локатора типа 24, в linkedObject - имя подключаемого объекта. После загрузки сцены копия linkedObject будет расположена в позиции spaceObject, причём эта связь не единоразовая - при изменении позиции spaceObject изменится и позиция копии linkedObject.&lt;br /&gt;
==Контейнер комнаты (19)==&lt;br /&gt;
 int    childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используется для хранения комнат игрового мира.&lt;br /&gt;
==Ломанная линия коллизии (20)==&lt;br /&gt;
==Контейнер-переключатель (21)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      groupsCount;&lt;br /&gt;
 int      defaultGroupIndex;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Контейнер с переключаемым содержимым. По умолчанию отображается группа под индексом defaultGroupIndex (если состояние переключателя не задаётся постоянно кодом игры).&amp;lt;/br&amp;gt;&lt;br /&gt;
Если у контейнера есть префикс &amp;quot;refer_&amp;quot; в названии, то значение активной группы привязывается к такому же контейнеру, у которого нет такого префикса в имени. Например, отображаемая группа контейнера &amp;quot;refer_DashboardGlowKey&amp;quot; будет зависеть от состояния контейнера &amp;quot;DashboardGlowKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Некоторые переключатели, используемые на моделях транспорта===&lt;br /&gt;
Данные приведены для игры &amp;quot;Дальнобойщики 2&amp;quot; версии 8.2.&lt;br /&gt;
&lt;br /&gt;
====Повреждения====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| Damage1Key || 5 || Повреждения бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFCKey || 3 || Повреждения капота.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFRKey || 4 || Повреждения переднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageFLKey || 4 || Повреждения переднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageRKey || 3 || Повреждения правой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageLKey || 3 || Повреждения левой боковины кузова.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBRKey || 4 || Повреждения заднего правого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBLKey || 4 || Повреждения заднего левого крыла.&lt;br /&gt;
|-&lt;br /&gt;
| DamageBCKey || 3 || Повреждения багажника и/или заднего бампера.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel0Key || 4 || Повреждения I колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel1Key || 4 || Повреждения II колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel2Key || 4 || Повреждения III колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel3Key || 4 || Повреждения IV колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel4Key || 4 || Повреждения V колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel5Key || 4 || Повреждения VI колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel6Key || 4 || Повреждения VII колеса.&lt;br /&gt;
|-&lt;br /&gt;
| DamageWheel7Key || 4 || Повреждения VIII колеса.&lt;br /&gt;
|}&lt;br /&gt;
Нумерация колёс транспорта ведётся слева-направо от передних к задним. Например, I колесо - это переднее левое, II - это переднее правое, и т.д.&lt;br /&gt;
&lt;br /&gt;
====Переключатели светотехники====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| HeadLightKey || 2 || Фары головного света автомобиля.&lt;br /&gt;
|-&lt;br /&gt;
| BackFaraKeyR, BackFaraKeyL || 2 || Свечение огня заднего хода.&lt;br /&gt;
|-&lt;br /&gt;
| StopFaraKeyR, StopFaraKeyL || 3 || Задний фонарь. Группа II хранит свечение стоп-сигнала, группа III хранит свечение габаритного огня.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Другие переключатели====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! количество групп по умолчанию !! описание&lt;br /&gt;
|-&lt;br /&gt;
| SizeLightKey || 2 || Габаритные огни кузова грузовика; I группа пустая, II хранит модели огней; в настройках блока группой по умолчанию должна быть II.&lt;br /&gt;
|-&lt;br /&gt;
| HornKey || 2 || Модель гудка, отображаемая при его установке на СТО.&lt;br /&gt;
|-&lt;br /&gt;
| SupportKey || 2 || Опоры полуприцепа.&lt;br /&gt;
|-&lt;br /&gt;
| IconKey || 9 || Логотипы компаний, отображаемые на бортах грузовиков.&lt;br /&gt;
|-&lt;br /&gt;
| CopSirenKey || 2 || Звуковая сирена автомобиля милиции.&lt;br /&gt;
|-&lt;br /&gt;
| CopLightKey || 8 || Мигалки автомобиля милиции.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Другие переключатели===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! имя блока !! описание&lt;br /&gt;
|-&lt;br /&gt;
| GeometryKey || Переключает отображение вариантов моделей разной детализации в зависимости от настроек игры&lt;br /&gt;
|-&lt;br /&gt;
| CollisionKey || Коллизия автомобиля (но неизвестно, как именно она используется)&lt;br /&gt;
|-&lt;br /&gt;
| GlassKey || Лобовое стекло автомобиля, отображаемое в салоне во время дождя&lt;br /&gt;
|-&lt;br /&gt;
| RD_Key || Улучшение &amp;quot;радар&amp;quot;, устанавливаемое на СТО&lt;br /&gt;
|-&lt;br /&gt;
| RD_LampKey || Свечение сигнальных ламп радара&lt;br /&gt;
|-&lt;br /&gt;
| RedSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| GreenSvetKey || неизвестно&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey0 || Светофор для дорожного трафика&lt;br /&gt;
|-&lt;br /&gt;
| TrafficLightKey1 || Светофор для дорожного трафика&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Кроме того, в игре есть переключатели ILLUM_LEVEL_00 - ILLUM_LEVEL_15. Они используются в моделях домов для реализации света в окнах. Время работы данных переключателей приведено чуть далее на изображениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
b3d_wheel_groups_v2.jpg|Группы в DamageWheelKey&lt;br /&gt;
b3d_illum_key_time_hours.png|Время работы ILLUM_LEVEL в часах&lt;br /&gt;
b3d_illum_key_time_dbl.png|Время работы ILLUM_LEVEL в double&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Геометрия коллизии (23)==&lt;br /&gt;
==Локатор-контейнер (24)==&lt;br /&gt;
 Vector3 matrix0;&lt;br /&gt;
 Vector3 matrix1;&lt;br /&gt;
 Vector3 matrix2;&lt;br /&gt;
 Vector3 position;&lt;br /&gt;
 int     caseState?;&lt;br /&gt;
 int     childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Хранит в себе позицию и вращение. Возможно, также является контейнером-переключателем по типу блока 21. В свойствах локаторов, дочерних данному, матрицы преобразования и позиции должны быть указаны в локальных координатах относительно родительского локатора.&lt;br /&gt;
&lt;br /&gt;
==Звуковой объект (25)==&lt;br /&gt;
==Блок типа 27==&lt;br /&gt;
==Блок типа 28==&lt;br /&gt;
==Блок типа 29==&lt;br /&gt;
==Портал (30)==&lt;br /&gt;
 Vector4  doorPosition;&lt;br /&gt;
 char[32] targetRoom;&lt;br /&gt;
 Vector3  doorLowVertex;&lt;br /&gt;
 Vector3  doorTopVertex;&lt;br /&gt;
&lt;br /&gt;
Портал (дверь) между комнатами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&lt;br /&gt;
|-&lt;br /&gt;
| doorPosition || позиция портала&lt;br /&gt;
|-&lt;br /&gt;
| targetRoom || имя комнаты, в которую ведёт портал. Если комната находится в другом модуле, то имя задаётся в формате &amp;lt;модуль&amp;gt;:&amp;lt;комната&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| doorLowVertex|| крайняя нижняя левая точка портала&lt;br /&gt;
|-&lt;br /&gt;
| doorTopVertex|| крайняя верхняя правая точка портала&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Важно!'''&lt;br /&gt;
* Если портал ведёт в комнату другого модуля, то в одной комнате с этим порталом обязательно должен быть загрузчик модуля (блок типа 13)&lt;br /&gt;
* Порталы соседних комнат должны иметь одинаковую позицию (doorPosition) и границы, в противном случае запрошенная комната не будет отображена&lt;br /&gt;
==Блок типа 31==&lt;br /&gt;
==Источник света (33)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      is_enabled; &lt;br /&gt;
 int      unknown_var;&lt;br /&gt;
 int      lightType;&lt;br /&gt;
 Vector3  lightPosition;&lt;br /&gt;
 Vector3  lightDirection;&lt;br /&gt;
 float    falloff;&lt;br /&gt;
 float    attenuation0;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    attenuation1;&lt;br /&gt;
 float    theta;&lt;br /&gt;
 float    phi;&lt;br /&gt;
 float    R; &lt;br /&gt;
 float    G; &lt;br /&gt;
 float    B; &lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Источник света DirectX 8.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! параметр !! описание&amp;lt;ref&amp;gt;https://firststeps.ru/mfc/directx/dxhelp/r.php?59&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| lightType || тип источника света: 1 - направленный (directional), 2 - точечный (point), 3 - зональный (spot)&lt;br /&gt;
|-&lt;br /&gt;
| lightPosition || позиция источника света&lt;br /&gt;
|-&lt;br /&gt;
| lightDirection || направление освещения (нормальный вектор)&lt;br /&gt;
|-&lt;br /&gt;
| falloff || уменьшение освещения между внутренним конусом (theta) и внешним конусом (phi) источника света&lt;br /&gt;
|-&lt;br /&gt;
| attenuation0  || постоянное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation1  || линейное затухание&lt;br /&gt;
|-&lt;br /&gt;
| attenuation2  || квадратичное затухание&lt;br /&gt;
|-&lt;br /&gt;
| theta || угол внутреннего конуса в радианах, для нацеленного источника света. Это значение может принимать от 0 до значения Phi&lt;br /&gt;
|-&lt;br /&gt;
| phi  || угол внешнего конуса источника света. Т.е. вне этого конуса свет уже не освещает. Может принимать значения между 0 и числом Пи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Блок типа 34==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      dataCount;&lt;br /&gt;
 &amp;lt;Vector3fi[dataCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Блок геометрии (35)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 int      faceStructType;&lt;br /&gt;
 int      materialIndex;&lt;br /&gt;
 int      faceStructsNum;&lt;br /&gt;
 &amp;lt;faceStruct[faceStructsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок, хранящий в себе информацию о треугольниках 3D-модели. Вся геометрия, образованная блоком типа 35, при отрисовке имеет затенение по Гуро (&amp;quot;Gourand shading&amp;quot;). В отличие от типа 08, может иметь только один используемый материал и один тип faceStruct. Индекс материала, заданный внутри faceStruct, игнорируется.&lt;br /&gt;
==Контейнер-блок вершин (36)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] spaceObject;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные). В spaceObject можно задать имя локатора типа 24, и тогда данный контейнер будет привязан к позиции локатора. В linkedObject задаётся подключенный объект (например, коллизия).&lt;br /&gt;
==Контейнер-блок вершин (37)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] linkedObject;&lt;br /&gt;
 int      vertsStructType;&lt;br /&gt;
 int      vertsStructsNum;&lt;br /&gt;
 &amp;lt;vertsStruct[vertsStructsNum]&amp;gt;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Блок-контейнер вершин. Хранит в себе сложные вершины (тип определяется vertsStructType - могут быть и нормали, и несколько слоёв UV, и другие данные).&lt;br /&gt;
==Контейнер-блок типа 39==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 Vector4  some_vector;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      childCount;&lt;br /&gt;
 &amp;lt;блоки[childCount]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение неизвестно.&lt;br /&gt;
==Генератор объектов (40)==&lt;br /&gt;
 Vector4  nodePosition;&lt;br /&gt;
 char[32] some_string;&lt;br /&gt;
 char[32] generatorClass;&lt;br /&gt;
 int      generatorType;&lt;br /&gt;
 int      some_value;&lt;br /&gt;
 int      paramsNum;&lt;br /&gt;
 &amp;lt;данные_генератора[paramsNum]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Генератор объектов. До конца не изучен.&lt;br /&gt;
&lt;br /&gt;
===Типы генераторов===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! generatorClass !! описание&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator || Генератор деревьев. Использовался в версиях 4.0 - 5.5. Использование в более поздних версиях игры возможно, но приводит к сообщениям в warn.log.&lt;br /&gt;
|-&lt;br /&gt;
| $$TreeGenerator1 || Генератор сбиваемых деревьев. Используется в версиях игры, начиная с 6.6.&lt;br /&gt;
|-&lt;br /&gt;
| $$People || Создаёт модели людей и животных в определённое время суток в указанных локациях.&lt;br /&gt;
|-&lt;br /&gt;
| $$GeneratorOfTerrain || Генератор ландшафта в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$CollisionOfTerrain || Генератор коллизии в Алмазном.&lt;br /&gt;
|-&lt;br /&gt;
| $$StaticGlow || неизвестно, не встречается в игре&lt;br /&gt;
|-&lt;br /&gt;
| $$DynamicGlow || Создаёт блики от источников света, изменяющиеся от расстояния до наблюдателя. Есть во многих b3d-файлах игрового мира.&lt;br /&gt;
|-&lt;br /&gt;
| $$WeldingSparkles || Излучатель искр. Используется в bb.b3d.&lt;br /&gt;
|-&lt;br /&gt;
| $$SeaGenerator || неизвестно, не встречается в игре&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Технические ограничения (Дальнобойщики II) =&lt;br /&gt;
* На одну отрисовываемую 3D-модель должно приходиться не более 1023 вершин;&lt;br /&gt;
* Число одновременно активных источников света не должно быть более 8 (?), в противном случае игра будет их отключать, пока количество сократится до допустимого.&lt;br /&gt;
&lt;br /&gt;
{{Дб2}}&lt;br /&gt;
&lt;br /&gt;
= Примечания =&lt;/div&gt;</summary>
		<author><name>Aleko 2144</name></author>
		
	</entry>
</feed>