WRLD — различия между версиями
Материал из GTAModding.ru
Leonid (обсуждение | вклад) |
Majestic (обсуждение | вклад) |
||
(не показаны 14 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
{{stub}} | {{stub}} | ||
− | '''WRLD''' - формат, используемый в LCS, VCS и Manhunt2. Хранит все данные для рендеринга игровых локаций - геометрию, текстуры, а так же информацию о размещении объектов. Аналог на [[ | + | '''WRLD''' - формат, используемый в LCS, VCS и Manhunt2. Хранит все данные для рендеринга игровых локаций - геометрию, текстуры, а так же информацию о размещении объектов. Аналог на [[RenderWare]] - формат BSP (корневая секция которого так же называется "world"). |
+ | |||
+ | С форматом умеют работать программы: | ||
+ | |||
+ | 1. [[GTA Stories IMG Tool]] и GTA LCS Texture Editor от HackMan128 | ||
+ | |||
+ | 2. [[Stories WRLD Tool]] и LCS IPL generator от Хероманта. | ||
+ | |||
+ | 3. [[GTA Stories Map Converter v1.0]] и Manhunt2 PS2 to PC Level Converter от MAJEST1C_R3 | ||
== Структура == | == Структура == | ||
− | ''' | + | WRLD бывает 3х типов: |
+ | |||
+ | '''Master WRLD''' - главный WRLD, имеет расширение LVZ и хранит наиболее используемые модели и текстуры, параметры интерьеров и другие данные. Также в Master WRLD содержится массив заголовков Slave WRLD и Triggered WRLD. | ||
+ | |||
+ | '''Slave WRLD''' - побочный WRLD, который содержит дополнительные модели и текстуры для текущего участка карты а также координаты расстановки объектов (относительно локальной системы координат, глобальные координаты можно вычислить с помощью WRLD групп в Master WRLD). Если ресурс в Slave WRLD имеется и в Master WRLD, то игра использует ресурс из Slave WRLD. | ||
+ | |||
+ | '''Triggered WRLD''' - побочный WRLD, который подгружается если вызван специальный триггер (например используется для зданий, которые в течении игры будут взорваны или изменены), содержит только модели и текстуры. | ||
+ | |||
+ | В Vice City Stories также содержится дополнительный тип WRLD, который называется AREA, который содержит модели и текстуры и прилинковывается к WRLD. | ||
глобальный заголовок WRLD [32 байта] | глобальный заголовок WRLD [32 байта] | ||
Строка 12: | Строка 28: | ||
0х04 4b: тип WRLD (1 - Master WRLD, 0 - Slave WRLD) | 0х04 4b: тип WRLD (1 - Master WRLD, 0 - Slave WRLD) | ||
0х08 4b: размер WRLD | 0х08 4b: размер WRLD | ||
− | 0х0С 4b: | + | 0х0С 4b: адрес на начало глобалсекции (таблицы адресов для всех подсекций в WRLD) |
− | 0х10 4b: | + | 0х10 4b: адрес на начало глобалсекции (повторяется) |
0х14 4b: количество оффсетов в глобалсекции | 0х14 4b: количество оффсетов в глобалсекции | ||
0х18 4b: адрес на продолжение подчинённого World в IMG-архиве (для мастера не используется, равно нулю) | 0х18 4b: адрес на продолжение подчинённого World в IMG-архиве (для мастера не используется, равно нулю) | ||
Строка 23: | Строка 39: | ||
цикл, читающий каждую группу Slave WRLD из [[IMG]]-архива { | цикл, читающий каждую группу Slave WRLD из [[IMG]]-архива { | ||
4b: адрес на массив начал Slave WRLD | 4b: адрес на массив начал Slave WRLD | ||
− | 4b: | + | 4b: смещение WRLD группы по Х)) |
} конец цикла | } конец цикла | ||
4b: количество всех ресурсов в уровне (один master WRLD + все подчинённые ему slave WRLD) | 4b: количество всех ресурсов в уровне (один master WRLD + все подчинённые ему slave WRLD) | ||
Xb: выравнивание (0хАААА...) | Xb: выравнивание (0хАААА...) | ||
− | 4b: | + | 0x320 4b: Количество строк в таблице задающей timeobjects (Одна строка занимает 4 байта) |
− | 4b: | + | 0x324 4b: адрес таблицы, задающую определённым объектам на карте свойства timeobjects от времени суток или состояния игрового процесса. |
− | 4b: | + | 0х328 4b: количество строк в таблице 2dfx эфффектов (1 строка занимает 48 байт) |
− | 4b: | + | 0х32С 4b: адрес таблицы 2dfx эфффектов |
− | 4b: | + | 0х330 4b: количество Slave WRLD с интерьерами (1 строка занимает 6 байт) |
− | 4b: оффсет на | + | 0х334 4b: оффсет на таблицу загрузки интерьеров. |
− | 4b: количество радар-прикреплённых текстур (только для ЛСС) | + | 0х338 4b: количество радар-прикреплённых текстур (только для ЛСС) |
− | 4b: адрес на массив начал радар-прикреплённых текстур (только для ЛСС) | + | 0х33С 4b: адрес на массив начал радар-прикреплённых текстур (только для ЛСС) |
+ | |||
+ | '''Структура строки timeobjects''' | ||
+ | |||
+ | 2b - триггер | ||
+ | 2b - IPL ID | ||
+ | |||
+ | '''Структура строки параметров интерьеров''' | ||
+ | |||
+ | 1b - позиция в WRLD группе | ||
+ | 1b - номер WRLD группы | ||
+ | 2b - неизвестно | ||
+ | 2b - номер Slave WRLD интерьера. | ||
+ | |||
+ | '''Радары''' | ||
+ | |||
+ | Текстуры радаров хранятся в CHK, и аналогично WRLD подгружаются из IMG по заголовкам в LVZ. В LCS количество радаров всегда равно количеству Slave WRLD. Triggered WRLD радаров не имеют. | ||
+ | |||
+ | Заголовок: | ||
+ | |||
+ | 0х00 4b: сигнатура "xet" | ||
+ | 0х04 4b: номер текстуры радара (если, к примеру, номер = 45 - то, соответственно, внутри CHK находится текстура radar45 и т.д) | ||
+ | 0х08 4b: размер CHK | ||
+ | 0х0С 4b: адрес на начало глобалсекции (таблицы адресов для всех подсекций в CHK) | ||
+ | 0х10 4b: адрес на начало глобалсекции (повторяется) | ||
+ | 0х14 4b: количество оффсетов в глобалсекции | ||
+ | 0х18 4b: адрес на продолжение CHK в IMG | ||
+ | 0х1С 4b: не используется (всегда 0) | ||
+ | |||
+ | |||
заголовок Slave WRLD [48 байт] | заголовок Slave WRLD [48 байт] | ||
Строка 40: | Строка 85: | ||
0х20 4b: адрес на таблицу идентификаторов ресурсов, хранящихся в WRLD. | 0х20 4b: адрес на таблицу идентификаторов ресурсов, хранящихся в WRLD. | ||
0х24 2b: количество ресурсов в WRLD | 0х24 2b: количество ресурсов в WRLD | ||
− | 0x26 2b: | + | 0x26 2b: неизвестно (обычно = 0х12) |
− | 0x28 32b: | + | 0x28 32b: 8 адресов на секции IPL, последний оффсет указывает на конец последней таблицы. |
− | 0х48 2b: | + | 0х48 2b: количество привязанных Triggered WRLD |
− | 0х4A 2b: флаг, назначение неизвестно | + | 0х4A 2b: флаг, назначение неизвестно (обычно = 0х12) |
− | 0х4C 4b: | + | 0х4C 4b: адрес на таблицу привязанных Triggered WRLD |
+ | |||
+ | |||
+ | '''Структура строки привязанных Triggered WRLD''' | ||
+ | |||
+ | 2b - триггер | ||
+ | 2b - номер привязанного Slave WRLD. | ||
+ | |||
+ | '''Структура таблицы переходов на скайлинг и координаты моделей''' | ||
+ | |||
+ | Данная таблица располагается сразу после заголовка Slave WRLD и имеет фиксированное число оффсетов. | ||
+ | |||
+ | Каждый оффсет имеет тип Longint и ссылается на определенное место во внутренней бинарной таблице скайлинга и [[IPL]] | ||
− | ''' | + | Последний оффсет таблицы ссылается на технический сектор '''AAAAAAAA''', необходимый для движка, сигнализирующий об окончании загрузки [[IPL]]. |
− | + | '''Структура таблицы скайлинга и координат моделей:''' | |
− | + | Длинна строки = 80b, количество строк определено в заголовке (см. выше) | |
− | + | 0х00 2b - IPL ID (1 модель может состоять из нескольких ресурсов), необходимо произвести логическую операцию and 0x7FFF для получения реального ID | |
+ | 0x02 2b - ID ресурса | ||
+ | 0х04 8b - глобальные XYZ и радиус ограничивающей сферы (каждая из величин хранится в half precision float) | ||
+ | 0х0С 4b - выравнивание | ||
+ | 0х10 64b - matrix 4x4 | ||
+ | * matrix 4x4 используется для хранения координат, масштаба модели (векторы из матрицы) и угла поворота модели на карте (кватернион из матрицы). | ||
− | '''Структура таблицы идентификации | + | '''Структура таблицы идентификации ресурсов''' |
− | По данной таблице | + | По данной таблице движок игры, исходя из ID ресурса, находит нужный ресурс в WRLD. |
+ | |||
+ | Одна строка таблицы занимает 4 байта для мастера, 8 байт для подчинённого, количество ресурсов в WRLD записано в заголовке. | ||
− | + | 4b: ID ресурса (только для подчинённого WRLD, для мастера определён счётчиком номера строки) | |
− | 4b: ID | + | 4b: Оффсет на ресурс |
− | 4b: Оффсет на | + | |
− | '''Структура общего FAT''' | + | '''Структура общего FAT (глобалсекции)''' |
Общий FAT обычно располагается в самом конце файла и указывает на все оффсеты, которые ссылаются непосредственно на модели/текстуры/IPL. | Общий FAT обычно располагается в самом конце файла и указывает на все оффсеты, которые ссылаются непосредственно на модели/текстуры/IPL. | ||
− | Используется | + | Используется для перехода оффсетов из локального (т.е от начала файла) статуса к глобальному (от начала буфера памяти). |
{{GTA_Stories-navi}} | {{GTA_Stories-navi}} | ||
[[Категория:GTA LCS]][[Категория:GTA VCS]][[Категория:Моддинг консольных версий]][[Категория:Форматы файлов]] | [[Категория:GTA LCS]][[Категория:GTA VCS]][[Категория:Моддинг консольных версий]][[Категория:Форматы файлов]] |
Текущая версия на 11:27, 10 июня 2014
WRLD - формат, используемый в LCS, VCS и Manhunt2. Хранит все данные для рендеринга игровых локаций - геометрию, текстуры, а так же информацию о размещении объектов. Аналог на RenderWare - формат BSP (корневая секция которого так же называется "world").
С форматом умеют работать программы:
1. GTA Stories IMG Tool и GTA LCS Texture Editor от HackMan128
2. Stories WRLD Tool и LCS IPL generator от Хероманта.
3. GTA Stories Map Converter v1.0 и Manhunt2 PS2 to PC Level Converter от MAJEST1C_R3
Структура
WRLD бывает 3х типов:
Master WRLD - главный WRLD, имеет расширение LVZ и хранит наиболее используемые модели и текстуры, параметры интерьеров и другие данные. Также в Master WRLD содержится массив заголовков Slave WRLD и Triggered WRLD.
Slave WRLD - побочный WRLD, который содержит дополнительные модели и текстуры для текущего участка карты а также координаты расстановки объектов (относительно локальной системы координат, глобальные координаты можно вычислить с помощью WRLD групп в Master WRLD). Если ресурс в Slave WRLD имеется и в Master WRLD, то игра использует ресурс из Slave WRLD.
Triggered WRLD - побочный WRLD, который подгружается если вызван специальный триггер (например используется для зданий, которые в течении игры будут взорваны или изменены), содержит только модели и текстуры.
В Vice City Stories также содержится дополнительный тип WRLD, который называется AREA, который содержит модели и текстуры и прилинковывается к WRLD.
глобальный заголовок WRLD [32 байта]
0х00 4b: сигнатура "DLRW" 0х04 4b: тип WRLD (1 - Master WRLD, 0 - Slave WRLD) 0х08 4b: размер WRLD 0х0С 4b: адрес на начало глобалсекции (таблицы адресов для всех подсекций в WRLD) 0х10 4b: адрес на начало глобалсекции (повторяется) 0х14 4b: количество оффсетов в глобалсекции 0х18 4b: адрес на продолжение подчинённого World в IMG-архиве (для мастера не используется, равно нулю) 0х1С 4b: не используется (всегда 0)
заголовок Master WRLD [800 байт]
0х20 4b: адрес на таблицу идентификаторов ресурсов, хранящихся в WRLD. цикл, читающий каждую группу Slave WRLD из IMG-архива { 4b: адрес на массив начал Slave WRLD 4b: смещение WRLD группы по Х)) } конец цикла 4b: количество всех ресурсов в уровне (один master WRLD + все подчинённые ему slave WRLD) Xb: выравнивание (0хАААА...) 0x320 4b: Количество строк в таблице задающей timeobjects (Одна строка занимает 4 байта) 0x324 4b: адрес таблицы, задающую определённым объектам на карте свойства timeobjects от времени суток или состояния игрового процесса. 0х328 4b: количество строк в таблице 2dfx эфффектов (1 строка занимает 48 байт) 0х32С 4b: адрес таблицы 2dfx эфффектов 0х330 4b: количество Slave WRLD с интерьерами (1 строка занимает 6 байт) 0х334 4b: оффсет на таблицу загрузки интерьеров. 0х338 4b: количество радар-прикреплённых текстур (только для ЛСС) 0х33С 4b: адрес на массив начал радар-прикреплённых текстур (только для ЛСС)
Структура строки timeobjects
2b - триггер 2b - IPL ID
Структура строки параметров интерьеров
1b - позиция в WRLD группе 1b - номер WRLD группы 2b - неизвестно 2b - номер Slave WRLD интерьера.
Радары
Текстуры радаров хранятся в CHK, и аналогично WRLD подгружаются из IMG по заголовкам в LVZ. В LCS количество радаров всегда равно количеству Slave WRLD. Triggered WRLD радаров не имеют.
Заголовок:
0х00 4b: сигнатура "xet" 0х04 4b: номер текстуры радара (если, к примеру, номер = 45 - то, соответственно, внутри CHK находится текстура radar45 и т.д) 0х08 4b: размер CHK 0х0С 4b: адрес на начало глобалсекции (таблицы адресов для всех подсекций в CHK) 0х10 4b: адрес на начало глобалсекции (повторяется) 0х14 4b: количество оффсетов в глобалсекции 0х18 4b: адрес на продолжение CHK в IMG 0х1С 4b: не используется (всегда 0)
заголовок Slave WRLD [48 байт]
0х20 4b: адрес на таблицу идентификаторов ресурсов, хранящихся в WRLD. 0х24 2b: количество ресурсов в WRLD 0x26 2b: неизвестно (обычно = 0х12) 0x28 32b: 8 адресов на секции IPL, последний оффсет указывает на конец последней таблицы. 0х48 2b: количество привязанных Triggered WRLD 0х4A 2b: флаг, назначение неизвестно (обычно = 0х12) 0х4C 4b: адрес на таблицу привязанных Triggered WRLD
Структура строки привязанных Triggered WRLD
2b - триггер 2b - номер привязанного Slave WRLD.
Структура таблицы переходов на скайлинг и координаты моделей
Данная таблица располагается сразу после заголовка Slave WRLD и имеет фиксированное число оффсетов.
Каждый оффсет имеет тип Longint и ссылается на определенное место во внутренней бинарной таблице скайлинга и IPL
Последний оффсет таблицы ссылается на технический сектор AAAAAAAA, необходимый для движка, сигнализирующий об окончании загрузки IPL.
Структура таблицы скайлинга и координат моделей:
Длинна строки = 80b, количество строк определено в заголовке (см. выше)
0х00 2b - IPL ID (1 модель может состоять из нескольких ресурсов), необходимо произвести логическую операцию and 0x7FFF для получения реального ID 0x02 2b - ID ресурса 0х04 8b - глобальные XYZ и радиус ограничивающей сферы (каждая из величин хранится в half precision float) 0х0С 4b - выравнивание 0х10 64b - matrix 4x4 * matrix 4x4 используется для хранения координат, масштаба модели (векторы из матрицы) и угла поворота модели на карте (кватернион из матрицы).
Структура таблицы идентификации ресурсов
По данной таблице движок игры, исходя из ID ресурса, находит нужный ресурс в WRLD.
Одна строка таблицы занимает 4 байта для мастера, 8 байт для подчинённого, количество ресурсов в WRLD записано в заголовке.
4b: ID ресурса (только для подчинённого WRLD, для мастера определён счётчиком номера строки) 4b: Оффсет на ресурс
Структура общего FAT (глобалсекции)
Общий FAT обычно располагается в самом конце файла и указывает на все оффсеты, которые ссылаются непосредственно на модели/текстуры/IPL.
Используется для перехода оффсетов из локального (т.е от начала файла) статуса к глобальному (от начала буфера памяти).