Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: denis2000, FantomICW  
Модостроение. Создание и редактирование локаций
denis2000Дата: Пн, 10.10.2011, 21:29 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Создание, редактирование, перенос локаций и добавление в игру

Работа с SDK и дополнительными программами для создания, редактирования и добовления локаций

Если у вас появились вопросы по созданию, редактированию, переносу локаций, а так же по добавлению их в игру. Задавайте их в этой теме - умные головы,
модосторители и просто разбирающиеся в программировании люди вам ответят.


Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7

Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML
[cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл:
1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R])
2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx"
3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо)
Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#"
Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut]

[cut=Декомпиляция уровней в формат SDK. Спасибо VERvolF]Для декомпиляции игровых карт в формат LevelEditor'a используется консольная утилита converter.exe, входящая в пакет X-ray Game asset tools pack или X-ray Engine Tools (converter). Последнюю версию искать на сайте

Настройка Конвертера.

Открываем любым текстовым редакором файл converter.ini, в нем находим строки:
Code
; 2947+ (финалка включая обновления)
[2947_config]:2945_config
$game_data$ = c:\temp\1\gamedata.3312\
$game_levels$ = c:\temp\1\gamedata.3312\levels\

; 3456+ (Clear Sky включая обновления)
[3456_config]:2947_config
$game_data$ = c:\temp\1\gamedata.3502\
$game_levels$ = c:\temp\1\gamedata.3502\levels\
fake_mu_gamemtls = 34xx_fake_mu_gamemtls
fake_gamemtls = 34xx_fake_gamemtls

Здесь $game_data$ - путь до папки gamedata с распаковаными ресурсами игры, $game_levels$ - до папки levels в gamedata соответственно. Необходимо указать полные пути.

В файле fsconverter.ltx находим следующую строку:
Code
$sdk_root$ = false| false| c:\program files\x-ray sdk\level_editor\

Здесь $sdk_root$ - путь до полного SDK (русифицированный не работает нормально с converter.exe). Правим путь на свой, не забывая поставить слэш в конце.

Более конкретная настройка СДК см. Ссылки.

Декомпиляция.

Конвертер полностью настроен, теперь нужно создать .bat-файл для конвертирования в формат SDK. Для этого создаем текстовой файл, пишем внутри команду и меняем формат файла с .txt на .bat:
Code
converter -level <имя_карты> -out <имя_сцены> -mode maya|le|le2 -with_lods
pause

Здесь <имя_карты> - имя папки с картой в каталоге gamedata\levels\, например l08_yantar (локация Янтарь из ТЧ), <имя_сцены> - имя карты после декомпиляции, можно не писать, в этом случае имя карты после декомпиляции не изменится.
Далее выдержка из docs\converter.txt:

Quote
Ключ -mode задаёт режим работы:
maya - декомпилировать только геометрию карты.
le - декомпилировать в формат LE.
le2 - декомпилировать в формат LE (для l12_stancia_2).
raw - декомпилировать в формат LE (отладочный режим).


Ключ -with_lods обрабатывается в зависимости от значения -mode. Если он задан совместно с -mode maya, программа выдаст ещё и MU-модели. С остальными
режимами его наличие заставляет converter разбивать LOD-текстуры, что
необходимо для полной пересборки. Также ключ ''-with_lods'' следует использовать
если планируется дальнейшая перекомпиляция уровня.

Отладочные параметры: -dbgcfrm, -dbgmrg.

То есть команда для декомпиляции в формат SDK, например, уровня l08_yantar будет выглядеть так:
Code
converter -level l08_yantar -out l08_yantar_decompiled -mode le -with_lods

Если все сделано правильно, то после запуска батника пойдет процесс декомпиляции.

Найти декомпилированную карту можно будет в каталоге $sdk_root$\maps (файл, читаемый SDK) и $sdk_root$\rawdata\objects\levels (обьекты, используемые данным уровнем). Ну а далее думаю всё и так понятно - в ЛЕ жмём File -> Open и открываем нашу карту. [/cut][cut=Создание LOD-текстур]Изначально в пакете SDK отсутствуют LOD'ы. Их придется создать самостоятельно.
В свитке Scene Level Editor'a кликаем Objects-->Library Editor (Объекты-->Библиотека объектов). В открывшемся диалоговом окне выбираем нужный объект, ставим флажок Preview (Предпросмотр). Нажатием кнопки Make LOD (High Quality) или Make LOD (Low Quality) запускаем процесс создания LOD-текстур соответственно в высоком или низком качестве. Созданные LOD'ы можно найти в \rawdata\textures\lod\ (.tga) и \gamedata\textures\lod\ (.dds и .thm).

Если у объекта отсутствует .thm-файл с картинкой-превьюшкой, то можно создать его нажатием кнопки Make Thumbnail (Создать миниатюру), выбрав перед этим удобный ракурс для "съемки". [/cut]

[cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти?
Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда.
Для того чтоб найти LOG необходимо зайти вот сюда:

В Win хр лог находится:

C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs

Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.

В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs

Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка:
...
$app_data_root$ = true | false| $fs_root$| users\
(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx)
...
$logs$ = true| false| $app_data_root$| logs\
(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи)
...
[/cut][cut=Получение более подробной информации о вылете (ХОВАН)]
Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...)
Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так:
Code
function abort(fmt, ...)
                         local reason = string.format(fmt, ...)
                         error_log(reason)
end

Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией

Первый:
Code
Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line          : 748
Description   : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil)

Второй:
Code
Expression    : 0
Function      : ErrorLog
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp
Line          : 49
Description   : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic'

[/cut]


Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы,
статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки.
Помните чем подробнее вопрос, тем точнее ответ.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Пн, 01.12.2014, 21:02 | Сообщение # 436
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый вечер.

После копирования геймдаты от СГМ 2.1 поверх геймдаты СДК возникла масса жалоб на дублирование секций спавна.
Пришлось в секции предметов забивать строки типа $spawn = "respawn\zat_b14_stalker_1".
Жалобы на дубликаты пропали. Можно спавнить любые предметы из СГМ.

Возникла другая проблема. При декомпиляции локации вылезает это.



Разборка локаций зависает. Не разбираются даже локи из оригинального ЗП. Можно ли это устранить?
 
denis2000Дата: Пн, 01.12.2014, 23:43 | Сообщение # 437
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата sergej5500 ()
Пришлось в секции предметов забивать строки типа $spawn = "respawn\zat_b14_stalker_1"

Параметр $spawn показывает, где и как в меню SDK будет появляться предмет (раздел respawn имя zat_b14_stalker_1), поэтому называть все объекты одинаково мягко говоря неправильно и КАЖДАЯ секция предмета/объекта должна иметь уникальное имя, для независимого спавна через SDK.

Цитата sergej5500 ()
Можно ли это устранить?

Причину краша не знаю, возможно проблема решиться правильным именованием предметов, а возможно придется искать, что за предмет без секции в файле actor.ltx...


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
СахарДата: Вт, 02.12.2014, 09:15 | Сообщение # 438
Гражданский
Пользователи
Сообщений: 2
Награды: 4
Репутация: [ 69 ]

Цитата sergej5500 ()
Разборка локаций зависает.

Распаковщику не нравится, какая-та секция в actor.ltx так что замени его файлом из чистой игры всё равно он не на что не влияет в СДК.
У меня такой вопрос на локаций Лиманск после сборки или компиляций секторов появляется вот это.
[cut][/cut]
Просто любопытно, что это.
Ещё такой вопрос, в чём отличается черновая сборка Ai сетки от обычной кроме скорости компиляций?

Добавлено (02.12.2014, 09:15)
---------------------------------------------
Ещё такой вопрос в ТЧ и ЧН сталкеры могли переходить с локаций на локацию посредствам графпоинтов, а в ЗП осталась такая возможность?


 
sergej5500Дата: Вт, 02.12.2014, 11:36 | Сообщение # 439
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый день. Спасибо Сахар и denis2000 за совет насчет actor.ltx. Декомпиляция локации прошла успешно. Возникли новые проблемы.

При попытке открыть локацию постоянно вылезает 5 логов.

[cut=Логи]FATAL ERROR

[error]Expression : fatal error
[error]Function : CInifile::r_section
[error]File : D:\prog_repository\sources\trunk\xrCore\Xr_ini.cpp
[error]Line : 475
[error]Description : <no expression>
[error]Arguments : Can't open section 'levels'. Please attach [*.ini_log] file to your bug report


stack trace:


FATAL ERROR

[error]Expression : fatal error
[error]Function : CInifile::r_section
[error]File : D:\prog_repository\sources\trunk\xrCore\Xr_ini.cpp
[error]Line : 475
[error]Description : <no expression>
[error]Arguments : Can't open section 'global_rect'. Please attach [*.ini_log] file to your bug report


stack trace:


FATAL ERROR

[error]Expression : fatal error
[error]Function : CInifile::r_string
[error]File : D:\prog_repository\sources\trunk\xrCore\Xr_ini.cpp
[error]Line : 486
[error]Description : <no expression>
[error]Arguments : Can't find variable caption in [global_rect]

FATAL ERROR

[error]Expression : fatal error
[error]Function : CInifile::r_section
[error]File : D:\prog_repository\sources\trunk\xrCore\Xr_ini.cpp
[error]Line : 475
[error]Description : <no expression>
[error]Arguments : Can't open section 'music_tracks'. Please attach [*.ini_log] file to your bug report


stack trace:


FATAL ERROR

[error]Expression : fatal error
[error]Function : CInifile::r_string
[error]File : D:\prog_repository\sources\trunk\xrCore\Xr_ini.cpp
[error]Line : 486
[error]Description : <no expression>
[error]Arguments : Can't find variable caption in [music_tracks]


stack trace:[/cut]

При объединении геймдат файлы от СГМ затерли файлы от СДК. Я проверял папку configs через Тотал Коммандер. Вроде все секции на месте. СГМ у меня не вылетает с такими логами.

Из-за этих логов невозможно собрать новый all.spawn после правки локаций.
 
СахарДата: Вт, 02.12.2014, 11:53 | Сообщение # 440
Гражданский
Пользователи
Сообщений: 2
Награды: 4
Репутация: [ 69 ]

sergej5500, Проверь файлы game_maps_single.ltx и game_levels.ltx возможно они у тебя «побились» или где-то опечатка скорее даже опечатки..



Сообщение отредактировал Сахар - Вт, 02.12.2014, 12:22
 
denis2000Дата: Вт, 02.12.2014, 23:16 | Сообщение # 441
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата Сахар ()
У меня такой вопрос на локаций Лиманск после сборки или компиляций секторов появляется вот это.

Это ребро полигона, вероятно в этом месте располагается портал между секторами... В общем зеленый и ладно.
Цитата Сахар ()
Ещё такой вопрос, в чём отличается черновая сборка Ai сетки от обычной кроме скорости компиляций?

В полной рассчитывается дополнительно укрытия для ИИ, с учетом материалов их свойств и точек освещения.
Цитата Сахар ()
ТЧ и ЧН сталкеры могли переходить с локаций на локацию посредствам графпоинтов, а в ЗП осталась такая возможность?

Судя по тому, что локации все также связаны в единый граф с вероятностью 99% осталась.


sergej5500, Файл game.ltx не потер?


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
Игорь_ГоДата: Вт, 06.01.2015, 16:46 | Сообщение # 442
Отмычка
Пользователи
Сообщений: 26
Награды: 0
Репутация: [ 0 ]

Всем привет!
Делаю локацию и заметил маленькую "пакость" - визуальную деформацию объектов в игре.
Напр., нарисовал в реальных размерах ж\д платформу, а в игре она, если стоять на ней, получается длинной и узкой.
Вопрос: как избавиться от таких узкостей?
Кажется, что это связано с шириной угла зрения камеры - как этот угол регулировать?
Или причина в другом?
 
denis2000Дата: Вт, 06.01.2015, 17:51 | Сообщение # 443
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Игорь_Го, В SDK отображается нормально? Угол зрения регулируется правками рендера, посмотрите в интернете патчи для файлов xrRender_R***.dll

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
Игорь_ГоДата: Вт, 06.01.2015, 19:39 | Сообщение # 444
Отмычка
Пользователи
Сообщений: 26
Награды: 0
Репутация: [ 0 ]

denis2000, сейчас посмотрел в SDK - тоже как-то узковато, хотя размеры реальные.
Вот скрин http://rghost.ru/60172797
 
denis2000Дата: Вт, 06.01.2015, 20:08 | Сообщение # 445
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Игорь_Го, Честно говоря я не вижу заметных геометрических искажений, интересно взглянуть на скрины из SDK и 3D редактора. Можно конечно снять координаты точек в игре и проверить расстояния между ними.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
Игорь_ГоДата: Чт, 08.01.2015, 10:31 | Сообщение # 446
Отмычка
Пользователи
Сообщений: 26
Награды: 0
Репутация: [ 0 ]

denis2000, благодарю за ответ.
Пока оставлю так, как есть, а когда соберу всю локу, тогда и видно будет
 
sergej5500Дата: Вс, 11.01.2015, 14:51 | Сообщение # 447
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый день.

Создал в СДК тайник на крыше блокпоста.



Загрузил игру. Увидел это.



Тайник провалился под крышу. Как это исправить?
 
makdmДата: Вс, 11.01.2015, 15:11 | Сообщение # 448
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

Цитата sergej5500 ()
Тайник провалился под крышу. Как это исправить?


Не знаю как в SDK, но в AC/DC сразу понятно, что и где лежит.

Теперь распакуй all.spawn и посмотри, есть ли данные в секции оружия и боеприпасов для Update части нет-пакета.
Если нет, то будет проваливаться, как в твоём случае. Нужно добавить Update часть.
[cut noguest=Вроде как-то так]
Например AK-74 лежит на земле ( ему проваливаться просто некуда ):

......
; cse_alife_inventory_item properties
condition = 1
upgrades =

; cse_alife_item_weapon properties
ammo_current = 90
upd:condition = 1


А это на крыше:

.......
; cse_alife_inventory_item properties
condition = 1
upgrades =

; cse_alife_item_weapon properties
ammo_current = 90
upd:num_items = 0xf0
upd:force = 4.00722857674118e-011, 1.70314095180868e+028, 7.55454456398952e+031
upd:torque = 1.66350461487101e+022, 2.33178099051656e-009, 4.75617892911845e+030
upd:position = 425.427795410156, 36.571647644043, -40.2149047851563
upd:quaternion = 0, 0, 1, 0
upd:enabled = 1
upd:condition = 1
upd:weapon_zoom = 95
[/cut]


Терпение......
И все получится!


Сообщение отредактировал makdm - Вс, 11.01.2015, 15:21
 
denis2000Дата: Вс, 11.01.2015, 20:48 | Сообщение # 449
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, А вы отключили привязку объектов к АИ-сетке в свойствах?

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Пн, 12.01.2015, 18:11 | Сообщение # 450
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый вечер. Возникли такие вопросы.

Я объединил геймдату СДК с геймдатой СГМ. Теперь со всеми объектами СГМ можно работать в СДК.

ACDC последней версии поддерживает разбивку спавна на level.game и level.spawn. Если я для декомпиляции локации использую полученные файлы, то потом с этой локацией нельзя работать. Невозможно ничего добавить. Глюк СДК.

Если я конвертирую файл alife локации в level.spawn, то с локацией можно нормально работать. Но есть одно "но". На декомпилированной локации нет граф-пойнтов. Соответственно, нельзя собрать новый all.spawn. В принципе, это не очень большая проблема. Можно сделать новые граф-пойнты и потом собрать all.spawn. В связи с этим есть несколько вопросов.

1. Сколько граф-пойнтов достаточно для локации? В видеоуроке по СДК ставили по одному граф-пойнту на один смарт.
Но на Затоне 59 смартов и 317 граф-пойнтов.

2. Нужно ли все граф-пойнты привязывать к смартам? Или достаточно привязать к смартам по одному граф-пойнту. Остальные оставить свободными. Можно ли к одному смарту привязать несколько граф-пойнтов?

3. Список смартов для привязки берется из файла game_graphs. Там код такого вида.

[cut=Код][location_0]
000 = "..."
001 = "sim_smart_1"
002 = "sim_smart_2"
003 = "sim_smart_3"
004 = "sim_smart_4"
005 = "sim_smart_5"
006 = "sim_smart_6"
007 = "sim_smart_7"
008 = "sim_smart_8"
009 = "sim_smart_base"


[location_1]
000 = "..."
001 = "ограниченный доступ"
002 = "запрещенный доступ"

[location_2]
000 = "..."
001 = "не для игрока"

[location_3]
000 = "..."
001 = "zat_a1"
002 = "zat_a23_smart_terrain"
003 = "zat_b100"
004 = "zat_b101"
005 = "zat_b103_merc_smart"
006 = "zat_b104_zombied"
007 = "zat_b106_smart_terrain"
008 = "zat_b12"
009 = "zat_b14_smart_terrain"
010 = "zat_b18"
011 = "zat_b20_smart_terrain"
012 = "zat_b28"
013 = "zat_b33"
014 = "zat_b38_zat_b38u"
015 = "zat_b39"
016 = "zat_b40_smart_terrain"
017 = "zat_b42_smart_terrain"
018 = "zat_b52_zat_medic_home_smart"
019 = "zat_b53"
020 = "zat_b54"
021 = "zat_b56"
022 = "zat_b5_smart_terrain"
023 = "zat_b7_zat_b7_stalker_raider"
024 = "zat_stalker_base_smart"
025 = "zat_b55"
026 = "zat_sim_1"
027 = "zat_sim_2"
028 = "zat_sim_3"
029 = "zat_sim_4"
030 = "zat_sim_5"
031 = "zat_sim_6"
[/cut]

Реально существующие смарты в последней секции. Зачем нужны первые три секции?
Если в первые три секции скопировать содержимое четвертой секции, то теоретически возможно привязать граф-пойнт сразу к нескольким смартам. Максимум к четырем. Можно ли так делать?

4. Верно ли, что сталкеры идут от одного граф-пойнта к другому. На Кордоне, подключенном к СГМ от ЧН, они ходят своебразно. От одной точки до другой 20 метров. Непись из симуляции по дороге делает крюк на 40 метров в сторону.
 
Поиск: