Компоновка уровня на глобальной карте
|
Компоновка уровня на глобальной карте | |
| Автор | БАТЯ-STALKER |
| Дополнили | XMK, stalker grez, aka_sektor |
| Тип статьи | руководство |
| Актуальность | ЧН, ЗП |
| Необходимый софт | Текстовый редактор, STALKER Icon Editor, Map dragger |
| Необходимые файлы | game_maps_single.ltx, level.ltx, map\map_имя_нового_уровня.dds, ui_global_map.dds |
Теория
- Что такое глобальная карта?
Это текстура, поверх которой расставлены текстуры локальных карт всех уровней и объеденены общим фоном-переходом[1][2]. - Как она работает?
В конфиге задается путь к текстуре и её координаты-размеры. - Откуда на ней все карты локаций?
Локальные карты всех уровней налкадываются на глобальную карту по заданным в конфиге координатам.
Таким образом, в разделе КПК "Карта" видно метки локации "Кордон" на участке обозначающем "Кордон". А метки, например, "Армейских складов" — там где они и должны быть.
Разбор конфигов
На примере файлов Чистого Неба (аналогично и в Зове Припяти).
Глобальная карта
За параметры глобальной карты отвечает секция [global_map]
[global_map]
;
bound_rect = 0.0, 0.0, 1024, 2634.0
max_zoom = 6.0
texture = ui\ui_global_map
По умолчанию она находится в файле по пути gamedata\configs\game_maps_single.ltx
bound_rect – параметр задаёт координаты-размеры текстуры, нечто вроде сетки на глобальной карте. Числа означают крайние точки координат:
0.0, 0.0— координаты верхнего левого угла глобальной карты1024, 2634.0— координты нижнего правого угла глобальной карты.
Обратите внимание! Это не пиксели! Текстура имеет размер 1024x2048, а может быть и любого другого — но для движка высота карты берётся равной 2634.0 пункта! При том что ширина сохраняется 1024.
texture — параметр задаёт путь к текстуре относительно папки gamedata\textures. В данном случае, это ui\ui_global_map.
Обратите внимание! Расширение *.dds текстуры указывать не нужно.
max_zoom — это максимальное увеличение карты в КПК. В данном случае, максимально можно приблизить изображение в 6 раз. Пробуйте устанавливать и другие значения, иногда получается интересно.
Локальные карты
За параметры локальных карт отвечает секция [level_map] в файлах level.ltx каждого из уровней по пути gamedata\levels\имя_уровня\
bound_rect – параметр задаёт крайние координаты уровня ВНУТРИ самой локации. Любой кто имел дело с координатами на уровнях, замечал что X и Y (высоту сейчас не принимайте в расчет) бывают не только положительными, но и отрицательными. Точка на уровне имеющая координаты 0,0 это не угол карты, как можно было бы предположить, а где-то около её середины.
Например, на локации "Кордон" в ТЧ, точка с координатами 0,0 расположена недалеко от поста Кузнецова под мостом. А вот возле бункера Сидоровича координата X у игрока (или чего угодно другого, любого объекта в игре) будет отрицательная. А возле блокпоста военных (тот, что на юге, вниз по дороге от деревни новичков) координата Y будет отрицательной.
В параметре bound_rect последовательно указаны самые минимальные координаты уровня и самые максимальные. То есть самый меньший X, потом самый меньший Y, потом самый большой X, и четвёртое число – самый большой Y.
Обратите внимание! Эти координаты вовсе не там, где можно побегать. Нет. Речь идёт об УГЛАХ локации, там где заканчивается земля и начинается пустота. На локации "Лиманск" (bound_rect) юго-западный угол имеет координаты -210.000000,-415.000000, а северо-восточный 210.000000,425.000000. Точность указана до одной миллионной.
texture — параметр задаёт путь к текстуре относительно папки gamedata\textures. Именно она показывается на мини-карте в игре, и она же накладывется на глобальную карту по указанным координатам. В данном случае, это map\map_имя_уровня.
Координаты расположения всех уровней (от Болота до ЧАЭС-2) на глобальной карте прописываются в секции [level_maps_single] того же файла game_maps_single.ltx
[level_maps_single]
agroprom =
; agroprom_underground =
darkvalley =
escape =
garbage =
limansk =
marsh =
military =
red_forest =
stancia_2 =
yantar =
Точнее, в одноименных секциях, указанных в [level_maps_single].
Обратите внимание:
- Имена всех уровней должны соответствовать именам уровней из gamedata\levels\
- Если не прописать уровень в секцию
[level_maps_single]— игра не вылетит.
Например, agroprom_underground — закомментирован, но имеет локальную карту, отображаемую на мини-карте в игре.
Пример секции:
[limansk]
global_rect = 66.0, 874.0, 182.0, 1105.000000
music_tracks = limansk_musics
weathers = dynamic_default
global_rect – параметр задаёт координаты прямоугольника на глобальной карте, тот кусочек куда будет вписана (наложена) локальная карта уровня, и где будут с учётом масштаба отображаться все метки локации. Метод указания координат аналогичен bound_rect глобальной карты. Берутся два угла: первый — верхний левый, второй — нижний правый.
Обратите внимание! При определении координат на уровне отсчёт Y идёт снизу вверх, а тут наоборот, сверху вниз. Т.е. точка с координатами 50, 100 будет ВЫШЕ, чем точка 50, 200. А точка с координатами 50, 0 — вообще на самом верху. В то время, как точка с координатами 50, 2634 — на самом низу глобальной карты. Вообще, правило отсчёта координат от верхнего левого угла текстуры характерно для S.T.A.L.K.E.R., неизвестны другие игры использующие *.dds-формат таким же образом.
Касаемо координат 66.0, 874.0, 182.0, 1105.000000, получается, что прямоугольник куда будет вписана локальная карта уровня (в данном случае: Лиманска) определён двумя точками. Первая с координатами (на глобальной карте!) 66.0, 874.0, а вторая с координатами 182.0, 1105.000000. Зачем столько нулей – неизвестно. Но по этим координатам видно, что локальная карта Лиманска будет вписана в прямоугольник, который начинается от 66 по X и 874 по Y, а заканчивается на 182 по X и 1105 по Y. Итого на глобальной карте размер карты Лиманска составит 116x231 пункта.
Обратите внимание! Это не пиксели, а пункты, количество которых ограничено параметром bound_rect в секции [global_map] глобальной карты.
music_tracks – параметр задаёт секцию (по умолчанию она находится в файле по пути gamedata\configs\game_levels_music.ltx), в которой задаётся путь к фоновой музыке уровня относительно папки gamedata\textures. В данном случае, это music\limansk (limansk.ogg).
weathers – параметр задаёт секцию (по умолчанию она находится в файле по пути gamedata\configs\environment\dynamic_weather_graphs.ltx), в которой задаются секции погоды. В данном случае, это dynamic_default.
Примечание
- Интересно, что, например, локация "Подземелья Агропрома" в ТЧ, на глобальной карте тоже есть – но для неё отведено всего лишь 2x3 пункта, и находятся она почти посередине локации "Агропром"! Именно поэтому, когда игрок находится в подземке, его метка всегда светится в районе завода, где прятался Крот при первом заходе на локацию, и практически неподвижна.
- Похожим образом сделано и с локацией "Лаборатория Х-18" – она на глобальной карте расположена справа от локации "Радар", но размер её прямоугольника всего 2x2 пункта.
Практика
Этап 1. Редактирование текстуры
Откройте файл по пути gamedata\textures\ui\ui_global_map.dds в графическом редакторе (рекомендуется Adobe Photoshop + NVIDIA Texture Tools) и определите место для новой локации.
|
Наложите текстуру нового уровня в выбранное место, и сохраните изменения.
Этап 2. Расчет координат
Для добавления новой локации на глобальную карту в КПК, необходимо рассчитать её координаты: global_rect.
Чтобы это сделать, используйте координаты bound_rect и текстуру локальной карты. Они формируются при сборке уровня в Level Editor X-Ray SDK. Прописываются в секции [level_map] файла level.ltx нового уровня по пути gamedata\levels\имя_нового_уровня\
Секция имеет следующий вид:
[level_map] bound_rect = -210.000000,-415.000000,210.000000,425.000000 texture = map\map_limansk
Обратите внимание! Уровень должен быть сделан правильно, иметь правильную прямоугольную форму террейна, а геометрия оставаться в пределах террейна[3][4]. В противном случае, при сборке в SDK есть риск получить неправильные координаты.
Способ 1. STALKER Icon Editor
Откройте файл ui_global_map.dds в утилите STALKER Icon Editor, укажите выбранное место новой локации, и получите координаты верхнего левого угла будущего места расположения локации (см. нижнюю строку):
|
| На скриншоте не видно курсора, но координаты есть: x=180, y=370 |
global_rect нового уровня можно рассчитать зная:
- Координаты из STALKER Icon Editor. В данном случае: x=180, y=370
- Разрешение текстуры глобальной карты. В данном случае: 1024x2048
- Координаты параметра
bound_rectсекции[global_map]. В данном случае:1024, 2634.0
Калькуляция:
- Разделите координату 2634 на высоту текстуры 2048. Получится:
1.2861328125 - Умножте координату y=370 на получившееся в предыдущем пункте значение. Получится:
475.86 - Если разрешение текстуры локальной карты нового уровня размером 100x100, то
global_rectбудет такой:180.0, 475.86, 280.0, 575.86180.0— координата X левого края текстуры локации.475.86— число, которое получено. Координата верхнего края текстуры локации.280.0— координата X правого края текстуры локации (получена путём прибавления к координате левого края локации — ширины локальной карты уровня).575.86— координата Y нижнего края текстуры локации (получена путём прибавления к координате верхнего края локации — высоты локальной карты уровня).
Способ 2. Map dragger
Этап 3. Прописка в конфиг
- Пропишите новый уровень в секции
[level_maps_single]в файле по пути gamedata\configs\game_maps_single.ltx - Полученный
global_rectзадайте одноименному параметру в секции нового уровня. - Готово!
|
| Результат. |
Источники
- ↑ "Обустройка локаций в ЧН" stalkerin.gameru.net Архивировано: web.archive.org 22.01.2024 ; archive.ph 26.08.2026
- ↑ "XMK" amk-team.ru 17.08.2009 Архивировано: web.archive.org 21.11.2025
- ↑ "Romann" amk-team.ru 30.04.2020 Архивировано: web.archive.org 24.05.2025
- ↑ "Romann" amk-team.ru 16.01.2025 Архивировано: web.archive.org 10.10.2025
- ↑ "Создание локации для Stalker #19 - Создание карты для КПК в игре" youtube.com @ S_Grez 01.12.2015


