Структура файла .ipl

Инструкции по созданию дополнений для GTA Criminal Russia
Ответить
Аватара пользователя
danilasar
Сообщения: 202
Зарегистрирован: 17 июл 2018, 09:55
Откуда: Саратов, Россия
Контактная информация:

Структура файла .ipl

Сообщение danilasar » 05 авг 2018, 10:35

Доброго времени суток. В этой статье я Вам расскажу о том, как же устроен .ipl-файл в GTA San Andreas (Криминальная Россия) и для чего он предназначен.
Предназначение
.ipl (Item PLacement) предназначен для расстановки объектов на игровой карте, а также определяет зоны, пути, гаражи, маркеры интерьеров и многое другое. Если IPL файл находится в текстовом виде, то его можно открыть и отредактировать в любом текстовом редакторе, например в Блокноте. А если он находится в бинарном (скомпилированном) виде, то, понятное дело, для его изменения (если не хочется танцевать с бубном) уже используют специальные редакторы, либо программы, конвертирующие двоичные IPL в текстовые и обратно. Ну, или как вариант, HEX-редактор в руки и пошли в шахту!
Данный тип файла используется во всех играх серии GTA, начиная с третьей части (кроме GTA5), а точнее - GTA 3, GTA VC, GTA SA/CR (в текстовом и двоичном виде), GTA LCS (в двоичном виде), GTA VCS (в двоичном виде), GTA 4 (в текстовом и двоичном виде).
Примечание. Двоичный .ipl-файл в GTA4 имеет расширение .wpl, однако ни строение, ни предназначение не изменились.
Структура
Файлы .ipl разделены на несколько секций. Они могут быть не обязательны, или даже могут быть пустыми. Каждая секция начинается и идентификатора секции и заканчивается ключевым словом end. Строка секции разделяется запятыми, между которыми записаны значения каждой ячейки строки. Каждая ячейка может содержать либо целое или дробное число, либо одно слово:

Код: Выделить всё

inst
...
end
Секция INST
Отвечает за расположение и свойства статических и динамических (object.dat) объектов карты. Имеет следующий вид:

Код: Выделить всё

inst
ModelId, NULL, Interior, PosX, PosY, PosZ, RotX, RotY, RotZ, RotW, LOD
end
  • ModelId - уникальный идентификатор модели. Должен соответствовать идентификатору в IDE файле. Тип - DWORD.
  • NULL - пустое значение строки, игнорируется игрой. Может содержать любой мусор (обычно туда записывают имя DFF файла для совместимости с MAP_IO). Тип - string[24].
  • PosX, PosY, PosZ - координаты объекта относительно центра карты. Тип - float.
  • 1, 1, 1 - множители для масштабирования модели в игре, движком не используются, всегда равны или .dff. Определяется как кватернион, для перевода в Эйлеровы углы необходимы довольно сложные математические вычисления. Масштабируется только сама модель, модель коллизии не масштабируется! (при этом в игре появляются глюки с камерой). Тип - float
  • Interior - Номер интерьера, для которого используется модель (объекты с другими номерами интерьеров при этом не подгружаются на карту при попадании игрока в данный интерьер). Для основной карты номер интерьера = 0. Тип - WORD.
  • LOD - номер строки в текущем IPL файле для LODа, принадлежащего этой модели. Первый объект прописанный в IPL это строка «0», второй объект – «1» и так далее… Значение «-1» означает что LOD не используется. Тип - DWORD
Cекция CULL
В GTA3, GTA VC, GTA SA/CR существуют 4 таблицы с куллингами. В третей части первая таблица находится в бинарном виде в CULLZONE.DAT и содержит параметры загрузки куллингов в память и их глобальные координаты. Начинается с оффсета 0x04 и занимает в файле 6800 байт. Без редактирования exe, максимальное количество зон в первой таблице = 512 строк.
Вторую таблицу можно найти в бинарном виде в CULLZONE.DAT и в текстовом файле CULL.IPL, причём в GTA3 она грузится из бинарного, а в GTA VC и GTA SA/CR - из текстового вида. Декомпилировать первую и вторую таблицу из CULLZONE.DAT можно с помощью отечественной программы "CULLZONE COMPILER/DECOMPILER by Majestic", а можно модифицировать их вручную, через HEX-редактор (в винде это может быть HEX Editor, а ближайший аналог в Debian-подобных (Debian, Ubuntu, Mint, Kununtu, Lubuntu, Xubuntu и ещё несколько) - это gHEX).
Выглядит всё это дело вот так:

Код: Выделить всё

cull
centerX, centerY, centerZ, 0 (какой-то поворот), Ywidth, bottomZ, Xwidth, 0 (какой-то поворот), topZ, Flag1, Flag 2
centerX, centerY, centerZ, 0 (какой-то поворот),Ywidth, bottomZ, Xwidth, 0 (какой-то поворот), topZ, Flag, Vx, Vy, Vz, Cm
end
Границы Cull зон точно соотвествуют мировым координатам.
З.Ы. Второй формат секции CULL используется в основном для зеркал.
Двоичное счисление
Флаг
Описание
1111 1111 1111 1111-1Все параметры включены
0000 0000 0000 00000Все параметры выключены
0000 0000 0000 00011Блокируется опция смены камеры для игрока и авто
0000 0000 0000 00102Камера фиксируется вне зоны и следит за игроком
0000 0000 0000 01004"Низкая" камера на игроке и авто
0000 0000 0000 10008Игнорирование погодных эффектов типа тумана и дождя
0000 0000 0001 000016Полиция не видит игрока во время уровня розыска
0000 0000 0010 000032Игнорирование блокировки путей педов
0000 0000 0100 000064Честно говоря, сам не знаю
0000 0000 1000 0000128Активирует рендеринг подземных тоннелей (автомобильных и метро)
0000 0001 0000 0000256Сотрудники полиции всегда выходят из своих автомобилей, если игрок находится на высоком уровне розыска
0001 0000 0000 00004096Увеличение уровня розыска до 5 звёзд
Секция GRGE
Тут создаются гаражи для дальнейшего использования в main.scm. Используется только в San Andreas, хотя не было убрано и в Criminal Russia.

Код: Выделить всё

grge
X1, Y1, Z1, frontX, frontY, X2, Y2, Z2, Door, Type, Name
end
  • X1, Y1, Z1 - нижний левый передний угол
  • frontX, frontY - нижний правый передний угол
  • X2, Y2, Z2 - верхний левый задний
  • Door - тип дверей
  • Type - тип гаража
  • Name - имя гаража. используется для редактирования гаражей через SCM
Секция ENEX
Данная секция отвечает за создание соединений между интерьерами и внешним игровым пространством.

Код: Выделить всё

enex
X1, Y1, Z1, ROT, W1, W2, C8, X2, Y2, Z2, Rot2, Int, Flag, Name, Sky, I2, Time On, Time Off
end
  • X1, Y1, Z1 - месторасположение входа
  • ROT - Поворот
  • W1 - X Радиус входа
  • W2 - Y Радиус выхода
  • C8 - неизвестно. Значение всегда = 8
  • X2, Y2, Z2 - Местоположение выхода
  • Rot2 - вращение выхода в градусах
  • Int - номер целевого интерьера
  • Flag - тип маркера
  • Name - название интерьера
  • Sky - изменение цвета неба
  • I2 - Неизвестный параметр выраженный целым числом, возможно связано с погодой
  • Time On - Время включения действия маркера
  • Time Off - Время отключения действия маркера
Флаг
Имя
Описание
1неизвестный интерьерИспользуется только для маркеров
2unknown pairingиспользуется только для маркеров телепорта в интерьер
4Create linked pairPair with unflagged mate during new game start
8Reward interiorSets flag 0010 on pair mate when used
16Used reward entranceSet by accessing reward interior
32Cars and aircraftEnable for cars and aircraft
64Bikes and motorcyclesEnable for bikes and motorcycles
128Disable on footNo foot traffic. Use for cars and/or bikes only
256Accept NPC groupGroup members accepted at destination of pair (passengers stripped)
512Food date flagSet and cleared by food date (cut-scene related)
1024unknown burglarySet on Bayside and Temporary Burglary doors
2048Disable exitPlayer can enter but cannot exit a two-way pair
4096Burglary accessEnabled and disabled during Burglary
8192Вход без выходаСоздаётся только пикап входа. См. вход в ТЦ "Анашан" (Южный район) и психиатрическую больницу в селе Батырево (Арзамасский район).
16384Активирован по стандартуАктивируется по стандарту; часто очищается скриптам
32768Удаляется после использованияВстаём на enex, он выполняет действие и исчезает
Секция PICK
Эта секция создаёт пикапы оружия. В San Andreas использовалась лишь для огнетушителей в ресторанах фаст-фуда.

Код: Выделить всё

pick
ID, X, Y, Z
end
  • ID - ID оружия
  • X, Y, Z - координаты пикапа
Секция JUMP
Создаёт уникальный прыжок, заданный через минимальные и максимальные координаты для точки старта и приземления. Этот формат соответствует формату, который используется в опкоде 0814.

Код: Выделить всё

startXmin, startYmin, startZmin, startXmax, startYmax, startZmax, landXmin, landYmin, landZmin, 
landXmax, landYmax, landZmax, camX, camY, camZ, reward
Секция TCYC
Точной информации по TCYC пока нет. Возможно, секция управляет погодными эффектами в зоне. Внутри используется объект типа BOX.

Код: Выделить всё

tcyc
X1, Y1, Z1, X2, Y2, Z2, ?, ?, ?, ?, ?
end
Секция AUZO
Секция создаёт в зоне музыку. См. развлекательный центр "8-BIT" (г. Южный).

Код: Выделить всё

auzo
Name, ID, Switch, X1, Y1, Z1, X2, Y2, Z2
Name, ID, Switch, X, Y, Z, Volume
end
  • Name - имя зоны
  • ID - идентификатор музыки. С помощью него проигрывается определённая музыка в зоне.
  • Switch - делает музыку всегда включённой или выключенной. Не может быть принуждён использованием опкода 0917.
  • Volume - максимальная дистанция, с которой слышно музыку.
Секция MULT
Неизвестная секция, использовавшаяся только в GTA SA/CR и 4.
Секция CARS
Секция CARS используется для размещения автомобиля на карте. Для этого нужно вписать координаты на карте, поворот модели, информацию о цветах и прочее. В GTA San Andreas/Криминальной России для расстановки машин чаще всего регулярно используется бинарный формат .IPL. Его, понятное дело, можно открыть только HEX-редактором. А декомпиляторов, к сожалению, не существует.

Код: Выделить всё

4b  - FLOAT    - Позиция X
4b  - FLOAT    - Позиция Y
4b  - FLOAT    - Позиция Z
4b  - FLOAT    - Угол (Вокруг оси-Z)
4b  - INT32    - ID объекта 
4b  - INT32    - Основной цвет
4b  - INT32    - Вторичный цвет
4b  - INT32    - Появление автомобиля
4b  - INT32    - Сигнализация
4b  - INT32    - Свойство закрытых дверей
4b  - INT32    - Unknown1 
4b  - INT32    - Unknown2
Да, и ещё. Не ройтесь слишком много в /data, всё равно ничего не найдёте. Скомпилированные .ipl сидят в архиве /models/gta3.img.

Ответить