English version (link)ВведениеВ этой статье мы попробуем разобраться с тем, как был добавлен интерьер первого сейвхауса игрока, т.е. квартиры Романа и примыкающий к ней подъезд. Это поможет вам добавить свой интерьер в игру.
Какие файлы используются для добавления интерьеров- Коллизия интерьера (wbd)
- Модели для интерьера (wdr/wft)
- Файл ide для определения интерьера
- Файл wpl для размещения интерьера
Что вам понадобится- Текстовый редактор
- OpenIV
- 3ds Max, на котором поддерживается макс-скрипт GIMS IV
- GIMS IV для 3ds Max
Интерьер сейвхаусаНачнем с текстового файла ide, где инициализируется и настраивается сам интерьер.
Этот файл находится здесь: pc\data\maps\interiors\generic\brownstones.ide
Откройте его и найдите там следующую строку:
shitholesave, 0, 3, 2, 56, 100, -1, -1
Здесь и находится определение самого интерьера. Если мы пролистаем ниже, то поймем, что определение интерьера поделено на три секции:
1. shitholesave, 0, 3, 2, 56, 100, -1, -1
2. mloroomstart
3. mloportalstart
Под mloportalstart находится строка mloend, которая говорит нам о том, что это конец определения интерьера.
Изучив секции игровых интерьеров, я составил примерные параметры каждой секции. Скажу сразу, что "unk" - это неизвестный для меня параметр.
Первая секцияcollisionName, unk, numRooms, numPortals, numModels, unk, unk, unk
shitholesave, 0, 3, 2, 56, 100, -1, -1
collisionName (shitholesave) - имя коллизии, модель которой расположена здесь: pc\data\maps\interiors\generic\brownstones.img\shitholesave.wbd\shitholesave
numRooms (3) - количество "комнат", определенных в секции mloroomstart
numPortals (2) - количество "порталов", определенных в секции mloportalstart
numModels (56) - количество моделей, определенных в содержимом первой секции (На самом деле их 57, так как здесь отчет начинается с нуля, а не с единицы)
Теперь рассмотрим содержимое первой секции. В ней выставляется расположение всех моделей относительно центра коллизии shitholesave.
modelName, posX, posY, posZ, rotX, rotY, rotZ, rotW, unk, unk,
modelName - имя модели (wdr/wft)
posX, posY, posZ - позиция относительно центра коллизии
rotX, rotY, rotZ, rotW - вращение в кватернионах относительно центра коллизии
Секция mloroomstartВ этой секции настраиваются комнаты интерьера. Их здесь три: limbo, shitholerm, shitstairoms.
Каждый игровой интерьер имеет комнату под названием limbo. Можно сказать, что это общая комната для всего интерьера.
Границы этих комнат я изобразил на скриншотах в виде синего куба:



Теперь рассмотрим параметры комнаты на примере shitholerm:
interiorName, numModels, numPortals, startX, startY, startZ, endX, endY, endZ, unk, flags, unk
shitholerm, 41, 1, 4.48729, 6.88999, 4.42927, -10.1903, -5.46523, -0.0108841, 1, 2821791308, 111
interiorName - имя интерьера. Может использоваться в функции (нэйтиве) SET_ROOM_FOR_CHAR_BY_NAME и ей подобных
numModels - количество используемых моделей в этой комнате из первой секции
numPortals - количество используемых порталов в этой комнате из секции mloportalstart
startX, startY, startZ, endX, endY, endZ - начальная и конечная позиция воображаемого куба, который будет обозначать границы комнаты
Секция mloportalstartВ этой секции настраиваются порталы интерьера. Когда мы пересекаем такой портал, то мы перемещаемся в комнату интерьера или на улицу.
Их здесь два:
Первый портал перемещает нас между комнатами shitholerm и shitstairoms
Второй портал перемещает нас между улицей и комнатой shitstairoms
На скриншоте эти порталы изображены в виде плоскостей:

Теперь рассмотрим параметры портала на примере второго портала:
fromRoomID, toRoomID, posX1, posY1, posZ1, posX2, posY2, posZ2, posX3, posY3, posZ3, posX4, posY4, posZ4, modifierID, unk, unk, unk, unk, flags, unk
2, 0, 2.92575, -7.98447, -4.37221, 2.92575, -7.98447, -1.67221, 2.92575, -9.68447, -1.67221, 2.92575, -9.68447, -4.37221, 55, -1, -1, -1, 64, 16777215, 1
fromRoomID, toRoomID - между какими комнатами мы будем перемещаться, пересекая портал. В данном случае ID 0 - улица, ID 1 - shitholerm, ID 2 - shitstairoms
posX1-posZ4 - четыре позиции воображаемой плоскости, которая будет обозначать границы портала
modifierID - ID модификатора таймцикла. Эти модификаторы расположены здесь: pc\data\timecyclemodifiers.dat. В данном случае это модификатор Diner (55)
С ide мы закончили. Теперь посмотрим на строку, отвечающую за размещение интерьера на карте. Эта строка находится в этом файле: pc\data\maps\east\brook_s.img\brook_s_strbig0.wpl
Эта строка выглядит следующим образом:
893.109, -496.1509, 18.40247, 0, -1.867381E-008, 0, -1, shitholesave, 385, -1, 15, 500
Обратите внимание! Здесь указывается коллизионная модель интерьера из shitholesave.wbd. Эта же модель указана в первой секции mlo.
На данный момент это все, что мне известно об интерьерах GTA IV.