Опис файлу
Містить всю видиму геометрію карти. Тут вказані всі вершини з нормалями та координатами для текстур та індекси для побудови геометрії, а також синхронізація.
Файл складається з таких блоків:
|
|
Код блоку
|
| Версія компілятора картки |
1
|
| Опис вершин |
9
|
| Опис індексів |
10
|
| Опис синхронізації |
11
|
Версія компілятора картки (блок для всіх карток однаковий)
|
|
Значення
|
Розмір
|
| Код блоку |
1
|
Word(2)
|
| Стиснення даних (0 - ні, 32768 - так) |
0
|
Word(2)
|
| Розмір блоку (у байтах) |
4
|
DWord(4)
|
| Номер версії (для всіх однаковий) |
13
|
DWord(4)
|
Опис вершин
|
|
Значення
|
Розмір
|
| Код блоку |
9
|
Word(2)
|
| Стиснення даних (0 - ні, 32768 - так) |
0
|
Word(2)
|
| Розмір блоку (у байтах) |
4
|
DWord(4)
|
| Кількість блоків опису вершин |
-
|
DWord(4)
|
| Блок опису вершин |
-
|
-
|
Блок опису вершин
|
|
Значення
|
Розмір
|
| Початок нового блоку |
0
|
DWord(4)
|
| Початок опису формату вершини |
2
|
DWord(4)
|
| Формат вершини |
-
|
-
|
| Кінець опису формату вершини |
255
|
DWord(4)
|
| Початок опису вершин |
17
|
DWord(4)
|
| Кількість вершин |
-
|
DWord(4)
|
| Вершини |
-
|
-
|
Формат вершин
Декілька слів про формат вершин. Як відомо, у файлі кілька блоків опису вершин. У грі не всі об'єкти однакові: для брашів потрібно вказувати координати лайтмапів, а координати текстур для дерев можна спростити. Тому вершини, задані в різних блоках, можу відрізнятися. Формат вершини задається за допомогою кількох структур – це стандартний формат вертекс-буфера D3D. Тобто. у файлі зберігаються готові скомпоновані вертекс-буфери для D3D:
|
|
Значення
|
Розмір
|
| ??? (Завжди нуль) |
0
|
Word(2)
|
| Зміщення |
-
|
Word(2)
|
| Тип змінних |
-
|
Word(2)
|
| Що описують змінні |
-
|
Word(2)
|
На початку будь-якої вершини знаходяться координати її розміщення, тому, у форматі вершин опис координат не вказується. У картах версії 2215 зустрічаються лише три формати вершин:
|
Рослинність
|
||
|
|
Значення
|
Розмір
|
| Нуль |
0
|
Word(2)
|
| Зміщення |
12
|
Word(2)
|
| Тип змінних |
4
|
Word(2)
|
| Нормалі |
3
|
Word(2)
|
| Чинник освітленості(?) |
?
|
Word(2)
|
| Зміщення |
16
|
Word(2)
|
| Тип змінних |
4
|
Word(2)
|
| Тангенти |
6
|
Word(2)
|
| Коректор текс.коорд.Х |
0/1
|
Word(2)
|
| Зміщення |
20
|
Word(2)
|
| Тип змінних |
4
|
Word(2)
|
| Бі-тангенти |
7
|
Word(2)
|
| Коректор текс.коорд.Y |
0/1
|
Word(2)
|
| Зміщення |
24
|
Word(2)
|
| Тип змінних |
7
|
Word(2)
|
| Координати текстури |
5
|
Word(2)
|
Таким чином, сумарна довжина однієї вершини рослинності дорівнює 32 байтам.
|
Браш
|
||
|
|
Значення
|
Розмір
|
| Нуль |
0
|
Word(2)
|
| Зміщення |
12
|
Word(2)
|
| Тип змінних |
4
|
Word(2)
|
| Нормалі |
3
|
Word(2)
|
| Чинник освітленості(?) |
?
|
Word(2)
|
| Зміщення |
16
|
Word(2)
|
| Тип змінних |
4
|
Word(2)
|
| Тангенти |
6
|
Word(2)
|
| Коректор текс.коорд.X |
0/1
|
Word(2)
|
| Зміщення |
20
|
Word(2)
|
| Тип змінних |
4
|
Word(2)
|
| Бі-тангенти |
7
|
Word(2)
|
| Коректор текс.коорд.Y |
0/1
|
Word(2)
|
| Зміщення |
24
|
Word(2)
|
| Тип змінних |
1
|
Word(2)
|
| Координати текстури |
5
|
Word(2)
|
| Нуль |
0
|
Word(2)
|
| Зміщення |
32
|
Word(2)
|
| Тип змінних |
6
|
Word(2)
|
| Координати лайтмапу |
261
|
Word(2)
|
Сумарна довжина однієї вершини браша становить 36 байт.
|
Ентітя
|
||
|
|
Значення
|
Розмір
|
| Нуль |
0
|
Word(2)
|
| Зміщення |
12
|
Word(2)
|
| Тип змінних |
4
|
Word(2)
|
| Нормалі |
3
|
Word(2)
|
| Чинник освітленості(?) |
?
|
Word(2)
|
| Зміщення |
16
|
Word(2)
|
| Тип змінних |
4
|
Word(2)
|
| Тангенти |
6
|
Word(2)
|
| Коректор текс.коорд.X |
0/1
|
Word(2)
|
| Зміщення |
20
|
Word(2)
|
| Тип змінних |
4
|
Word(2)
|
| Бі-тангенти |
7
|
Word(2)
|
| Коректор текс.коорд.Y |
0/1
|
Word(2)
|
| Зміщення |
24
|
Word(2)
|
| Тип змінних |
4
|
Word(2)
|
| ??? |
10
|
Word(2)
|
| Нуль |
0
|
Word(2)
|
| Зміщення |
28
|
Word(2)
|
| Тип змінних |
1
|
Word(2)
|
| Координати текстури |
5
|
Word(2)
|
Сумарна довжина однієї вершини ентіті складає 36 байт.
Виходячи з цього, отримуємо, наприклад, такий вид вершини:
|
Браш
|
|||
|
|
Значення
|
Зміщення
|
Розмір
|
| Координата X |
30.76
|
0
|
DWord(4)
|
| Координата Z |
0.2
|
4
|
DWord(4)
|
| Координата Y |
51.4
|
8
|
DWord(4)
|
| Нормаль за X |
127
|
12
|
Byte(1)
|
| Нормаль за Z |
255
|
13
|
Byte(1)
|
| Нормаль по Y |
127
|
14
|
Byte(1)
|
| Чинник освітленості(?) |
1
|
15
|
Byte(1)
|
| Тангент з Х |
127
|
16
|
Byte(1)
|
| Тангент з Z |
255
|
17
|
Byte(1)
|
| Тангент з Y |
255
|
18
|
Byte(1)
|
| Коректор текс.коорд.Х |
0
|
19
|
Byte(1)
|
| Бі-тангент з X |
0
|
20
|
Byte(1)
|
| Бі-тангент з Z |
127
|
21
|
Byte(1)
|
| Бі-тангент з Y |
127
|
22
|
Byte(1)
|
| Коректор текс.коорд.Y |
0
|
23
|
Byte(1)
|
| Координата текстури X |
3.1802
|
24
|
Single(4)
|
| Координата текстури Y |
2.2143
|
28
|
Single(4)
|
| Координата лайтмапу X |
0.4023
|
32
|
ShortSingle(2)
|
| Координата лайтмапу Y |
0.000097
|
34
|
ShortSingle(2)
|
Типи змінних
|
Код типу
|
Значення
|
|
1
|
DWord(4) + DWord(4)
|
|
4
|
Byte(1) + Byte(1) + Byte(1) + Byte(1)
|
|
6
|
Word(2)/32768 + Word(2)/32768
|
|
7
|
(Byte(1)-128)/128 + (Byte(1)-128)/128 + (Byte(1)-128)/128 + (Byte(1)-128)/128
|
З ходу, можливо, важко в'їхати в структуру даних, але коли почнете колупати файл, відразу все зрозумієте - нічого складного немає.
Опис індексів
|
|
Значення
|
Розмір
|
| Код блоку |
10
|
Word(2)
|
| Стиснення даних (0 - ні, 32768 - так) |
0
|
Word(2)
|
| Розмір блоку (у байтах) |
-
|
DWord(4)
|
| Кількість блоків опису індексів |
-
|
DWord(4)
|
| Блок опису індексів |
-
|
-
|
Блок опису індексів
|
|
Значення
|
Розмір
|
| Кількість індексів у блоці |
-
|
DWord(4)
|
| Індекси |
-
|
DWord(4)
|
Індекс: Word (2).
Кількість індексів має бути завжди втричі, тому що за індексами будуються трикутники.
Опис синхронізації
(що вони синхронізують, для вчених досі залишається загадкою):
|
|
Значення
|
Розмір
|
| Код блоку |
11
|
Word(2)
|
| Стиснення даних (0 - ні, 32768 - так) |
0
|
Word(2)
|
| Розмір блоку (у байтах) |
-
|
DWord(4)
|
| Кількість блоків синхронізації |
-
|
DWord(4)
|
| Блоки синхронізації |
-
|
-
|
Блок синхронізації
|
|
Значення
|
Розмір
|
| ??? |
0
|
DWord(4)
|
| ??? |
0
|
DWord(4)
|
| ??? |
0
|
DWord(4)
|
| ??? |
0
|
DWord(4)
|
| Кількість одиниць синхронізації |
-
|
DWord(4)
|
| Одиниці синхронізації |
-
|
-
|
Одиниця синхронізації
|
|
Значення
|
Розмір
|
| ??? |
-
|
DWord(4)
|
| ??? |
-
|
Word(2)
|
| ??? |
-
|
Word(2)
|