Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: [SDK] X-Ray SDK 0.4
GAMEINATOR forums > S.T.A.L.K.E.R. > Мастерская: создание модов для S.T.A.L.K.E.R.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67
РСФСР
Помогите разобраться с вылетом при компиляции спавна
CODE
FATAL ERROR

[error]Expression : !m_actor
[error]Function : CGameSpawnConstructor::process_actor
[error]File : .\game_spawn_constructor.cpp
[error]Line : 291
[error]Description : There must be the SINGLE level with ACTOR!


stack trace:
macron
Подтверждаю, террейн колхоза пересвечен, особенно на статике заметно.



Почему-то текстура террейна без альфы. Это точно та самая текстура, которую компилятор создал в папке с уровнем?
macron
Заделал полуфикс подручными средствами (paint.net). Проверял только на 1.0008 mp, на r1 вышло темновато, на r2 симпатично.

http://narod.ru/disk/35145777001/kolhoz_fixx1.7z.html

Modera
БогДан, macron опередил уже biggrin.gif
Modera
Кстати, на разной погоде по разному выглядит. Если использовать map то на р2 очень много блума.
Если юзать карту без фикса и погоду map то получается очень "жаркая" или "летняя" атмосфера так и р2 и на р1. Т.к. засвечено.
А если карту с фиксом то на р1 вполне приличный результат, на р2 мне напомнело когда впервые запустил р2 на 2232

РСФСР, актёр в спауне есть?
БогДан
Прошу прощения в финальную сборку засунул не ту текстуру террейна.

тут "правильная": http://ifolder.ru/27758988
Вот так выглядит террейн на максимальных и на статике:
KamikaZze
РСФСР

Цитата
Помогите разобраться с вылетом при компиляции спавна


Цитата
There must be the SINGLE level with ACTOR!


Должна быть только одна точка спавна главгероя на всю игру. Вам надо или удалить из конфига графов и локаций игры все локации кроме той что компилируете, или же если вы компилируете комплекс локаций целиком - оставить только одну точку спавна главгероя на все локации, остальные удалить.
YURSHAT
Доброго времени суток!
Форумчане, подскажите пожалуйста, в чем причина: последний конвертер Бардака (02-june-2011) не хочет выполнять команду dds to tga, лог следующий

CODE
log started (console and converter.log)
skipping ui\ui_cm_connection_error.thm (already exists)
total time: 0.078s


ЗЫ. Уровни и все остальное декомпилит.
FOX
Цитата(YURSHAT @ 24.12.2011, 07:42) *
skipping ui\ui_cm_connection_error.thm (already exists)

пропуск ui\ui_cm_connection_error.thm (уже существует)

видимо этот файл уже есть
YURSHAT
Цитата(FOX @ 24.12.2011, 10:49) *
видимо этот файл уже есть


Ну это понятно, что существует. Конвертер должен его пропустить и конвертить следующие, а как видно из лога он тупо прекращает конвертацию. В чем причина - неизвестно. Предыдущие версии конвертера работали нормально sad.gif
Trollz0r
Цитата
В чем причина - неизвестно.

А что в rawdata\textures ?
YURSHAT
Стандартные thm-мки, которые устанавливаютя с СДК

RedPython, если вас правильно понял, текущая версия конвертера пытается преобразовывать dds из папки rawdata? Хм, странно, предыдущие ведь брали из геймдаты. Получается нужно скопировать все текстуры из геймдаты в равдату?
Trollz0r
Нет, неправильно smile.gif dds должны быть в gamedata, это текстуры, с которыми работает движок; tga должны быть в rawdata, это исходные текстуры для всех редакторов.

Ошибку повторить не смог, все текстуры успешно восстанавливаются. Конвертер с CUDA или без?
YURSHAT
Цитата(RedPython @ 24.12.2011, 11:33) *
Нет, неправильно dds должны быть в gamedata, это текстуры, с которыми работает движок; tga должны быть в rawdata, это исходные текстуры для всех редакторов.

Ну я так и думал, просто из-за того, что конвертация не происходит, подумал, что в этой версии что-то изменили.
Цитата(RedPython @ 24.12.2011, 11:33) *
Конвертер с CUDA или без?

без

Скачивал отседа. В описании сказано:
Цитата
Исправлена ошибка dds2tga, когда менялись местами R- и B-компоненты в полученных .tga. Также исправлена путаница с $textures$ и $game_textures$, из-за которой невозможно было сконвертировать изображения из .dds в .tga.

Это судя по всему как раз мой случай, видимо плохо исправлено biggrin.gif
abramcumner
сейчас насколько я помню dds должны быть в $game_textures, tga складываются в $textures
Соответственно проверь пути в fsconverter.ltx
YURSHAT
Цитата(abramcumner @ 24.12.2011, 14:58) *
сейчас насколько я помню

А разве раньше не так было. Ведь fsconverter.ltx совершенно не изменился.

Цитата
dds должны быть в $game_textures

Папка level_editor\gamedata\textures
Цитата
tga складываются в $textures

Папка level_editor\rawdata\textures

ЗЫ. fsconverter.ltx я оставил без изменений, переименовав соответсвенно fsconverter_soc.ltx в fsconverter.ltx. Путь до СДК у меня по умолчанию. Хм, ума не приложу, где собака зарыта
sad.gif wallbash.gif
РСФСР
Ребят, помогите!
Такой вылет на синхронизации:
CODE

FATAL ERROR

[error]Expression : fatal error
[error]Function : CInifile::r_string
[error]File : E:\stalker\sources\trunk\xrCore\Xr_ini.cpp
[error]Line : 352
[error]Description : <no expression>
[error]Arguments : Can't find variable fragment_speed in [explosion]


stack trace:
БогДан
Нашел на одном ресурсе:

Цитата
В конфиге машины найди строчку fragment_tracer_max_length и над ней добавить fragment_speed = 76
Кажется так лечится вылет.
РСФСР
Цитата(БогДан @ 25.12.2011, 20:23) *
Нашел на одном ресурсе:

Цитата
В конфиге машины найди строчку fragment_tracer_max_length и над ней добавить fragment_speed = 76
Кажется так лечится вылет.

Машины? На локации есть заспавненные машины, но ничего больше я не делал
И где этот конфиг машины?
РСФСР
С предыдущим вылетом разобрался
Теперь новый вылет: dry.gif
CODE
FATAL ERROR

[error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line : 73
[error]Description : <no expression>
[error]Arguments : LUA error: e:\s.t.a.l.k.e.r\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)


stack trace:
БогДан
Я только скопировал совет с другого ресурса по такому же вылету.
Больше по данному вопросу там не сказано ни слова, но судя по всему - человеку это помогло.

ты можешь проверить это, а можешь проигнорировать.

http://stalkerin.gameru.net/wiki/index.php...%D0%B3%D0%B8%29

Цитата
Expression : fatal error
Function : CScriptEngine::lua_error
File : D:\xray-svn\xr_3da\xrGame\script_engine.cpp
Line : 74
Description : <no expression>
Arguments : LUA error: e:\stalker\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)

Ошибка распространённая. На первый взгляд кажется, что ошибка как раз в скриптах, но всё может быть иначе. Делаем так: открываем файл _g.script блокнотом, закоменчиваем 20 строку (ставим перед строкой --) и идём к тому месту где поймали вылет. Так мы получим более развёрнутый ответ. Участник:Призрак: Автор прав в том что вылет очень распространен, но так его исправлять нельзя, т.к. nil передается в эту функцию только при каком-то форс мажоре. Поэтому необходимо перейти в _g.script в функцию printf и перед log1(string.format(fmr,..)) дописать: get_console():execute("load "..fmt). После этого запустить еще раз игру и посмотреть при передачи какой строки игра вылетает. Потом найти эту строку в скриптах игры и прикинуть почему аргумент (у нас это аргумент №2 (bad argument #2)) равен nil
РСФСР
Ребят, снова нужна помощь: smile.gif
CODE
FATAL ERROR

[error]Expression : false
[error]Function : CStepManager::reload_foot_bones
[error]File : E:\stalker\sources\trunk\xr_3da\xrGame\step_manager.cpp
[error]Line : 222
[error]Description : section [foot_bones] not found in monster user_data


stack trace:
macron
Цитата(РСФСР @ 30.12.2011, 19:09) *
[error]Description : section [foot_bones] not found in monster user_data

Секция [foot_bones] не найдена в ogf-модели какого-то монстра или в конфиге, на который модель ссылается. Например, в тч/чн многие ogf-модели ссылаются на config\models\config\models\capture\*_captures.ltx
РСФСР
Цитата(macron @ 30.12.2011, 21:10) *
Цитата(РСФСР @ 30.12.2011, 19:09) *
[error]Description : section [foot_bones] not found in monster user_data

Секция [foot_bones] не найдена в ogf-модели какого-то монстра или в конфиге, на который модель ссылается. Например, в тч/чн многие ogf-модели ссылаются на config\models\config\models\capture\*_captures.ltx
а как определить, к какой именно модели или конфигу ссылается? Проверил - в captures [foot_bones] везде есть
macron
Цитата(РСФСР @ 30.12.2011, 21:44) *
а как определить, к какой именно модели или конфигу ссылается?

Методом исключения, например. Поискать во всех добавленных файлах-моделях монстров слово [foot_bones] и слово captures.ltx
Где не будет, ни того, ни другого - наиболее подозрительны.
РСФСР
Проблема в том, что новых монстров я не добавлял; если только задействовал зомби(но зомби работают нормально); хотя в том месте, где вылет сидит кровосос(опять же пысовский)
RayTwitty
Привет всем. Есть вопрос по поводу сборки графа через аиврапер (подключаю локи к ТЧ). Вылазит такое:
http://imagepost.ru/?v=qnynxdmqjbktzsgvsgqemjyarjxilt.png
Собсно где взять этот бинарник и куда положить, никто не знает?
Кстати после этого вроде как граф скомпилился, и вроде как всё норм, но вот эта ошибка меня смутила...
Trollz0r
Взять можно в гугле или в soc_sdk\level_editor\bins\compiler\
Кстати, AIwrapper использовать не стоит, давно есть нормальный компилятор от ТЧ (правда, пока сталкерин лежит, его не скачать).
RayTwitty
Цитата(RedPython @ 10.01.2012, 15:20) *
Взять можно в гугле или в soc_sdk\level_editor\bins\compiler\


Ага, нашел бинарник в той папке. Только куда его кидать? В bins кинул, всё равно говорит что не может найти.

Цитата
Кстати, AIwrapper использовать не стоит, давно есть нормальный компилятор от ТЧ (правда, пока сталкерин лежит, его не скачать).

Ну, я в этом нуб, подключаю по тутору, там именно через него надо делать.
---
Кстати у меня еще такая проблема, на подключаемой локе уже есть спавн актора (как и на кордоне), так вот при компиляции спавна, пишет что есть дубликат этой секции. Нужно я так понял распаковать level.spawn и в нем удалить актора? Или же надо декомпилить локу, убирать там спавн, компилить на драфте и брать спавн оттуда? (скорее всего я щас бред написал, но я в этом нуб)))
Но как декомпилить этот спавн, есть вроде прога от K.D. - универсальный асдс, но я видел его только на амк, но тот тоже сейчас лежит...
Trollz0r
Цитата(Shadows @ 10.01.2012, 15:35) *
куда его кидать?

C:\ Windows\ system\ msvcp70.dll

Лучше использовать xrAI - шагов меньше и спавн не бьется. Запусти его без параметров, посмотри справку (для сборки глобального спавна выполнить xrAI -s level1,level2,...levelN -out spawn_name).

Цитата(Shadows @ 10.01.2012, 15:35) *
Нужно я так понял распаковать level.spawn и в нем удалить актора? Или же надо декомпилить локу, убирать там спавн, компилить на драфте и брать спавн оттуда?

Как хочешь, но быстрее будет первое.
http://rghost.ru/35835599

Кстати, компилить весь уровень не имеет смысла, достаточно просто экспортировать спавн (Compile -> Make game).
RayTwitty
Вроде как подключил локу, сделал скриптовый переход на неё (для теста), но при загрузке мало того что загружается кордон (т.е. перехожу с кордона на кордон О_о), так еще и вылет без лога при загрузке. Скриптовый переход сделан правильно (много раз им пользовался, проблема явно не в нем). Проблема думаю где-то в аи-переходах. Вообщем подключал по этому тутору от K.D.
Тутор от K.D.
Первое, что вам понадобится - это установленный СДК с настроенным аивраппером. Как настроить - подробно описано в шапке темы. Далее необходимо определиться, какие локации вы хотите иметь в своем паке. Рассмотрим такой случай - мы хотим иметь в своей игре три локации: кордон, генераторы и болота ЧН.

1. Подготовка к подключению этих локаций друг к другу.
Кордон в СДК у нас уже есть - мы скопировали туда всю геймдату ТЧ после установки СДК. Копируете генераторы и болота в папку level_editor\gamedata\levels. Если локация была до этого скомпилирована в СДК ТЧ (в нашем случае кордон и генераторы), делать больше ничего не надо, переходите к шагу 2. Если локация из ЧН или ЗП - придется поработать, ДАЖЕ если вы взяли локацию из пака локаций для ТЧ. Рассмортим работу с локацией из ЧН или ЗП на примере болот ЧН:
а) Удалите из папки с локацией level.spawn и level.ltx. После этого в папке с конвертером от бардака (предполагается, что он есть и настроен) создаете батник с таким текстом:
converter -level marsh -mode le
pause
Конвертер декомпилирует болота в формат СДК.
б) Откройте в Actor Editor объект terrain_marsh. Выберите справа Object Items и смотрите, какой шейдер присвоен, если тот, которого не хватает, то присвойте один из оригинальных шейдеров
Пример для воды:
Shader - effects \ water
Compile - def_shaders \ def_vertex
Game Mtl - material \ water
в) Открываете Level Editor. В нем открываете болота. Переходите в раздел objects (панель справа) и удаляете все, кроме объекта terrain (клик по объекту - del). Если у вас не очень сильный компьютер и LE зависает при открытии - удалите все объекты, кроме террейна в папке rawdata\objects\levels\marsh.
г) Ставите на карту light. Нажимаете вкладку light, потом сверху слева кнопку "чайник" и потом кликаете куда-нить на локу
д) Теперь нажмите glow, и аналогичным образом ставите на локу glow. В появившемся окне со свойствами glow выберете textures, где задайте текстуру glow_04.
е) Поставьте граф-поинты. Для этого перейдите в spawn element ai > graph point и поставьте по уровню некоторое количество граф-поинтов. Чем больше, тем лучше, однако слишком усердствовать не стоит. Ставить необходимо в местах скопления сталкеров и по предполагаемым путям их хождения. Сотни граф-поинтов вполне хватит. Один из графов, где вы хотите сделать появление ГГ при переходе с другой локации, можете назвать start_actor_01.
ж) Ставите низкое качество компиляции. Затем зайдите scene > options, после чего переименуйте name prefix и level path в название локации
з) Делаете лоды. Заходите objects > objects library, там, где написано Preview, есть окошко. Нажмите туда, после чего в доп окошке Object Library перейдите в levels > marsh. Там нажмите на объект marsh_lod0000, после этого нажмите make lod (low quality), потом yes. Вылезет еще окошко - Select Library Objects, теперь опять levels > marsh и там плюсиками выберите все лоды локации. После этого - ок.
и) Добавьте на локацию какой-нибудь объект - например, автомат. Если этого не сделать, аивраппер потом будет капризничать.
к) Компилируете на низшем качестве - Make Game и Build.
л) Последний шаг - скомпилируйте геометрию. Создайте в папке level_editor батник
@start bins\compiler\xrLC.exe -f marsh
и дождитесь окончания.

На этом все. Переходим к шагу 2.

2. Работа с аивраппером.
Перед началом работы с авираппером, необходимо показать ему, с какими локами ему работать. Вам нужно править три файла: game_graphs.ltx, game_levels.ltx и games_maps_single.ltx. Все они лежат в папке level_editor\gamedata\config. Разберем содержимое каждого файла
----game_graphs.ltx-----
[location_0]
000 = "..."
001 = "l01_escape"
002 = "generators"
003 = "marsh"

<в секции location_0 необходимо составить список своих локаций. Остальное не трогаем>

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

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

[location_3]
000 = "..."

----game_levels.ltx-----
[levels]
level01
level02
level03

<Записываете свои локации по такому образцу>

[level01]
name = L01_Escape
caption = "L01_Escape"
offset = 3000.0, 1000.0, 0.0
id = 01

[level02]
name = generators
caption = "generators"
offset = 1000.0, 1000.0, 6000.0
id = 02

[level03]
name = marsh
caption = "marsh"
offset = 2000.0, 1000.0, 0.0
id = 03

----game_maps_single.ltx-----
[level_maps_single]
L01_escape
generators
marsh

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[level_music_tracks]
music\amb01 = 0, 12, 0.5, 10,20
music\amb03 = 0, 12, 0.5, 10,15
music\amb07 = 12,24, 1.0, 5, 25

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[global_map]
texture = ui\ui_global_map --не трогаем!
bound_rect = 0.0,0.0, 1024, 2634.0 --не трогаем!
max_zoom = 6.0 --не трогаем!

[l01_escape]
texture = map\map_escape --путь к текстуре мини-карты для вашей локации
bound_rect = -317.164, -633.718, 404.880, 811.627 --координаты внутри локации в формате: минимальная X, минимальная Y, максимальная X, максимальная Y
global_rect = 355.0,2011.0, 576.0,2453.000000 --координаты локации на глобальной карте в формате: северо-западный угол - юго-восточный угол.
weathers = default --погодный пресет. Ставьте default, если не делали своего.
music_tracks = l01_escape_musics --амбиентные звуки на локации.

[generators]
texture = map\map_generators
bound_rect = -351.81, -639.389, 352.818, 65.245
global_rect = 300.0,500.0, 400.0,600.0
weathers = stancia

[marsh]
texture = map\map_marsh
global_rect = 22.0, 2113.0, 352.0, 2443.000000
bound_rect = -445.000000,-445.000000,755.000000,755.000000
weathers = boloto

С файлами разобрались. Теперь разберемся с аивраппером. Если ваша локация делалась с нуля в СДК, или вы работаете с локациями ЧН и ЗП, то для каждой из таких локаций нужно сначала просчитать АИ-сетку. В нашем случае это Болота. Создаем и запускаем такие батники в папке с аивраппером:

а) Сборка черновой сетки ИИ:
aiwrapper -draft -f marsh
После окончания работы аивраппера вы получите следующий файл: gamedata\levels\<имя_уровня>\level.ai.
б) Проверка связности сетки ИИ:
aiwrapper -verify marsh
в) Просчёт укрытий для сетки ИИ.
aiwrapper -f marsh
Вообще, этот шаг необязателен на ранних этапах тестирования карты.
г) Сборка ИИ-графа:
aiwrapper -g marsh
После окончания работы аивраппера вы получите следующий файл: gamedata\levels\<имя_уровня>\level.{graph|gct.raw}

Далее нужно соединить наши локации аивраппером в единое целое. Для этого создаем и запускаем такие батники в папке с аивраппером:

а) Склейка ИИ-графов карт в глобальный игровой граф:
> aiwrapper -m
На выходе: gamedata\game.graph и gamedata\levels\*\level.gct
б) Сборка all.spawn
> aiwrapper -s
На выходе: gamedata\spawns\all.spawn

Если все прошло удачно - поздравляю. Однако еще не все.

3. Пересборка all.spawn. Если вы не работаете с локами ЧН или ЗП - пропускайте этот шаг.
Аивраппер собрал нам all.spawn - это замечательно. Однако от локации ЧН или ЗП у нас в спавне только автомат, что мы воткнули в LE. Нет ламп и источников света, нет лестниц. Чтобы привести локацию в более-менее приличный вид, нужно пересобрать спавн.
а) Первым делом, распакуйте получившийся спавн. Для этого качаем отличную тулзу acdc и открываем файл acdc.pl. Там найдите подобную таблицу:
use constant levels_info => (
{ gvid0 => 600, },
{ gvid0 => 329, name => 'marsh' },
{ gvid0 => 252, name => 'generators' },
{ gvid0 => 0, name => 'l01_escape' },
);

Оставляете только те локации, что мы объединяем. Меняем параметр gvid0 на начальный геймвертекс вашей локации. Узнать эти вертексы просто - в папке с acdc должна быть тулза ggtool.pl. Берете получившийся при работе аивраппера game.graph (из папки level_editor\gamedata) и кидаете его в папку с ggtool.pl. После чего создаем и запускаем такой батник:
ggtool.pl game.graph >svyazi.txt
После окончания работы тулзы открываете появившийся файл svyazi.txt и там смотрите начальные вертексы. Верхнее ограничение по вертексам (gvid0 => 600) высчитывается примерно как вертекс от последней локи + 300-400 (возьмем с запасом).

После правки acdc.pl кидаете в папку с ним получившийся all.spawn (из папки level_editor\gamedata\spawns). После этого декомпилируете all.spawn. Открываете файл alife_marsh.ltx (наша ЧН-локация). Распакуйте оригинальный спавн той игры, откуда выдернули локацию (у нас ЧН), и открываете файл наше локации. Теперь основная задача - перенести из оригинального спавна в наш секции следующего типа:

section = climable_object (это лестницы)
section = lights_hanging_lamp (источники света)

Вообще, можете переносить хоть все - зависит от того, хотите ли вы получить чистую локацию или с оригинальным спавном. Единственный совет - не копируйте секции breakable_object и проверяйте визуал в секциях lights_hanging_lamp. Наличие breakable_object или ссылок на визуалы ламп, которых нет в ТЧ, приведет к вылетам Invalid vertex type for skinned object. Лечение пока не найдено.

Еще одно замечание - правьте game_vertex_id у переносимых секций. Значение гейм-вертекса должно соответствовать локации. В нашем примере, кордону соответствуют вертексы 0-252, генераторам - 252-329, болотам - больше 329 (смотрим acdc.pl).

На этом все. Если хотите, сделайте переходы между локациями. Компилируете all.spawn

4. Создание АИ-переходов.
Поскольку сборку мы создаем для дальнейшего моддинга, нам необходимы АИ-переходы. Эти переходы позволяют неписям переходить с локи на локу. Даже если вы не собираетесь отправлять ваших квестовых неписей на другю локацию, без аи-переходов невозможен полноценный оффлайн-алайф. Поэтому сделаем их.
Делать Аи-переходы можно двумя способами. Первый - вместо aiwrapper -m сделать aiwrapper -m2 links.fixed. В файле links.fixed здесь указываются соединяемые вертексы разных локаций. Однако, я больше привык использовать второй способ - работать с утилиткой Колмогора - edge_add, ее и опишу.
Кладете свой game.graph в папку с edge_add.exe. Создаем батник, где прописываем следующее:

edge_add.exe game.graph 37 300
del game.graph
rename game.graph.new game.graph
edge_add.exe game.graph 45 400
del game.graph
rename game.graph.new game.graph
edge_add.exe game.graph 320 420
del game.graph
rename game.graph.new game.graph

Числа - это соединяемые вертексы локаций. Здесь написаны наобум, когда будете делать сами - выбирайте вертексы поближе к краям лок, там, где непись бы логично мог пройти.
После запуска и окончания работы утилитки получаем готовый game.graph

5. Правка карт освещения.
Этот шаг выполняется только для локаций из ЧН или ЗП, и только в том случае, если вы брали локу из оригинальной игры. Если это ваш случай, начнем. А если брали из пака лок для ТЧ - делать шаг НЕ НАДО.
Открываете папку с локацией там, где вы ее брали. Находим такие файлы lmap*_1.dds и lmap*_2.dds. Наша задача - чтобы в r1 и r2 не было некрасивых жутко черных теней.
Работаем через программу paint.net (требует установленного .Net Framework v2.0), кто умеет, может делать через фотошоп.
В папке с уровнем будем редактировать лайтмапы:
lmap*_1.dds - снижаем контраст на 15 единиц и сохраняем в формате dxt5 без мипмапов, с ними все
lmap*_2.dds переделывать сложнее - задача сделать менее прозрачным. Пересохраняем как dds в формате R5G6B5, прозрачность исчезнет совсем. Открываем снова и меняем прозрачность с 255 до 30, затем снижаем контраст на 15 единиц и сохраняем в формате dxt5 без мипмапов.

6. Вставка локаций в игру.
Нам необходимы следующие файлы:
configs\game_graphs.ltx
configs\game_levels.ltx
configs\game_maps_single.ltx
levels\l01_escape\
levels\generators\
Копируйте эти файлы в геймдату игры из геймдаты СДК. Также нужны файлы game.graph и spawns\all.spawn, их берете оттуда, где с ними работали.
Мы пока не скопировали паку с болотами. У лок из ЧН или ЗП несколько другой порядок копирования в геймдату игры:

--Берете папку marsh из оригинала, где брали ее изначально. Если берете из оригинальной игры - проверьте, что сделали шаг 5.
--Копируете в геймдату игры в папку levels
--из папки level_editor\gamedata\levels\marsh копируете с заменой два файла - level.gct и level.ai - в папку marsh в геймдате игры.

Все, теперь все готово. Можете запускать игру. Могут быть вылеты по шейдерам или текстурам - это нормально. Просто вставьте в геймдату игры недостающие текстуры и добавьте недостающие шейдеры с помощью Shader Editor.
Маленький совет: если ваша локация уже есть в оригинальной игре (у нас кордон), для уменьшения веса сборки всю папку levels\l01_escape копировать необязательно. Достаточно лишь скопировать файл level.gct из папки кордона в СДК в папку levels\l01_escape.

При составлении данного тутора использовались туторы от KostyaV, D1m0n и HitmanNew, а также ридми к программам от Колмогора и Бардака.

Дошел до 4 пункта, скачал прогу Колмогора. Потом скачал graph viewer чтобы узнать координаты точек, но не понял как им пользоваться. Но потом нашел скрины с координатами на двух локах, в т.ч. на той которую хотел подключить, там скринах посмотрел гейм-вертексы точек где стоял ГГ и вписал их в батник
Код
edge_add.exe game.graph 3 84
del game.graph
rename game.graph.new game.graph

Соединил кордон и новую локу (скриптовый переход тоже с кордона был). Я думаю может здесь ошибся? Может координаты гейм-вертекса надо было подругому снять? Просто думаю может на добавляемой локе уже есть такой гейм-вертекс как на кордоне, поэтому как бы с кордона на кордон переход идет...
---
Забыл добавить: лока которую подключаю уже сделана для ТЧ, я её просто к синглу подсоединяю.
Kostya V
Для того, чтобы подключить локацию не обязательно создавать АИ переходы.
Ну а если все таки хочется, то координаты точек для АИ переходов ты взял не правильно. Брать их надо из скомпиленного тобой геймграфа.
K.D.
Shadows, АИ-переходы не для актора - они для неписей. Можно их вовсе не делать. Актор у тебя появляется на кордоне из-за плохой настройки перехода.
RayTwitty
Цитата(K.D. @ 11.01.2012, 08:31) *
Актор у тебя появляется на кордоне из-за плохой настройки перехода.


Хм... Может потому, что я снимал координаты до того как начал подключать? Всмысле на авторской версии, где для теста просто побегать можно, тогда и снял координаты. Может они (и вертексы) сбиваются при присоединении к общему списку локаций?
Кстати, а возможен ли такой случай, что вертексы добавленной локации могут уже быть на оригинальной? Может из-за этого и глюки?

Цитата(Kostya V @ 11.01.2012, 05:02) *
Ну а если все таки хочется, то координаты точек для АИ переходов ты взял не правильно. Брать их надо из скомпиленного тобой геймграфа.


Ха блин, точно. Надо было в графе смотреть же... Вот теперь прога мне стала понятна smile.gif Спс.

K.D., можешь глянуть, правильно ли я всё сделал? Всмысле напишу конкретно как подключал локацию. Кратко:
Как я делал
Подготовил СДК и аиврапер. После чего перекинул папку с новым левелом в gamedata\levels. Далее первый шаг не смотрю, так как локация из билда, уже сделана для ТЧ.
2 шаг. Прописал всё в конфигах, думаю тут ошибок нет. Хотя... Распишу кое-чего, правильно ли я сделал:
Открыть
В оригинальной игре, файл game_graphs.ltx выглядит так:
Код
[location_0]
  000          = "..."
  001          = "эскейп"
  002          = "свалка"
  003          = "агропром"
  004          = "агропром-подземка"
  005          = "темная долина"
  006          = "лаборатория X-18"

Я же его переделал вот так:
Код
  000          = "..."
  001          = "l01_escape"
  002          = "l02_garbage"
  003          = "l03_agroprom"
  004          = "l03u_agr_underground"
  005          = "l04_darkvalley"
  006          = "l04u_labx18"
  007          = "l05_bar"
  008          = "l06_rostok"
...

Правильно? То есть составил нормальный список лок. И потом же этот файл без изменений кинул себе в геймдату, когда подключил.


После чего пропустил часть шага т.к. лока из билда:

Вот эту часть шага пропустил
Цитата
С файлами разобрались. Теперь разберемся с аивраппером. Если ваша локация делалась с нуля в СДК, или вы работаете с локациями ЧН и ЗП, то для каждой из таких локаций нужно сначала просчитать АИ-сетку. В нашем случае это Болота. Создаем и запускаем такие батники в папке с аивраппером:

а) Сборка черновой сетки ИИ:
aiwrapper -draft -f marsh
После окончания работы аивраппера вы получите следующий файл: gamedata\levels\<имя_уровня>\level.ai.
б) Проверка связности сетки ИИ:
aiwrapper -verify marsh
в) Просчёт укрытий для сетки ИИ.
aiwrapper -f marsh
Вообще, этот шаг необязателен на ранних этапах тестирования карты.
г) Сборка ИИ-графа:
aiwrapper -g marsh
После окончания работы аивраппера вы получите следующий файл: gamedata\levels\<имя_уровня>\level.{graph|gct.raw}

Ведь правильно?
После чего склеил граф и собрал спавн. Всё прошло нормально.
3 шаг пропускаю, т.к. лока из билда.
4 шаг - аи переходы. Получается они не обязательны, пока можно тоже пропустить.
5 шаг, пока тоже не трогаю, если проблемы будут, текстурки подправлю.
6 шаг, собсно скопировал себе 3 конфига, граф, спавн, сам новый левел и файлы level.gct от каждой локи. Вроде правильно?
Ну потом сделал для теста скриптовый переход.
Вот правильно я сделал всё? Или может какие-то из шагов не надо было пропускать?
K.D.
Shadows, если у тебя игра не вылетает при старте - как минимум, сделал правильно, не считая нюансов. Ты переход-то покажи. Граф поинты при компиляции глобального графа получают сквозную нумерацию и сохраняются как вертексы. Если при переходе оказываешься на той же самой локации - dest_game_vertex_id перехода кривой, как минимум.
А зачем вообще спавнить переход скриптом? Это же не булка - заспавнил и забыл - для каждого перехода надо перебирать нет-пакет и менять кусок cse_alife_level_changer. Проще делать их через спавн.

Кстати, а как ты определил, что переходишь с кордона на кордон, если дальше вылетает?
RayTwitty
Цитата(K.D. @ 11.01.2012, 18:09) *
Ты переход-то покажи. Граф поинты при компиляции глобального графа получают сквозную нумерацию и сохраняются как вертексы. Если при переходе оказываешься на той же самой локации - dest_game_vertex_id перехода кривой, как минимум.


Собственно вот:
открыть
Код
function create_level_changer(p_story_id, p_position, p_lvertex_id, p_gvertex_id, p_dest_lv, p_dest_gv, p_dest_pos, p_dest_dir, p_dest_level, p_silent)
    local obj = alife():create("level_changer", p_position, p_lvertex_id, p_gvertex_id)
    local packet = net_packet()
    obj:STATE_Write(packet)
    local game_vertex_id = packet:r_u16()
    local cse_alife_object__unk1_f32 = packet:r_float()
    local cse_alife_object__unk2_u32 = packet:r_u32()
    local level_vertex_id = packet:r_u32()
    local object_flags = packet:r_u32()
    local custom_data = packet:r_stringZ()
    local story_id = packet:r_u32()
    local spawn_story_id = packet:r_u32()
    local shape_count = packet:r_u8()
    for i = 1, shape_count do
        if packet:r_u8() == 0 then
            local center = packet:r_vec3()
            local radius = packet:r_float()
        else
            local axis_x_x = packet:r_float()
            local axis_x_y = packet:r_float()
            local axis_x_z = packet:r_float()
            local axis_y_x = packet:r_float()
            local axis_y_y = packet:r_float()
            local axis_y_z = packet:r_float()
            local axis_z_x = packet:r_float()
            local axis_z_y = packet:r_float()
            local axis_z_z = packet:r_float()
            local offset_x = packet:r_float()
            local offset_y = packet:r_float()
            local offset_z = packet:r_float()
        end
    end
    local restrictor_type = packet:r_u8()
    local dest_game_vertex_id = packet:r_u16()
    local dest_level_vertex_id = packet:r_u32()
    local dest_position = packet:r_vec3()
    local dest_direction = packet:r_vec3()
    local dest_level_name = packet:r_stringZ()
    local dest_graph_point = packet:r_stringZ()
    local silent_mode = packet:r_u8()
    packet:w_begin(game_vertex_id)
    packet:w_float(cse_alife_object__unk1_f32)
    packet:w_u32(cse_alife_object__unk2_u32)
    packet:w_u32(level_vertex_id)
    packet:w_u32(bit_not(193))
    packet:w_stringZ(custom_data)
    packet:w_u32(p_story_id)
    packet:w_u32(spawn_story_id)
    packet:w_u8(1)
    packet:w_u8(1)
    packet:w_float(2)
    packet:w_float(0)
    packet:w_float(0)
    packet:w_float(0)
    packet:w_float(4)
    packet:w_float(0)
    packet:w_float(0)
    packet:w_float(0)
    packet:w_float(4)
    packet:w_float(0)
    packet:w_float(0)
    packet:w_float(0)
    packet:w_u8(3)
    packet:w_u16(p_dest_gv)
    packet:w_u32(p_dest_lv)
    packet:w_vec3(p_dest_pos)
    packet:w_vec3(p_dest_dir)
    packet:w_stringZ(p_dest_level)
    packet:w_stringZ("start_actor_99")
    packet:w_u8(p_silent)
    packet:r_seek(0)
    obj:STATE_Read(packet, packet:w_tell())
end

function test_lc() -- вызываю при новой игре, но не суть важно
    create_level_changer(5510, vector():set(-208.9,-20.3,-167.8),43917,50,
    7425,3, vector():set(-182.9,-35.2,60.2), vector():set(0.0,1.56,-1.0), "l14_factory", 0) -- координаты которые снял до подключения локации (на авторской версии для теста).
end


Цитата
Кстати, а как ты определил, что переходишь с кордона на кордон, если дальше вылетает?

Ну во первых картинка при загрузке от кордона, во вторых в автосейве пишут, что кордон (всмысле потом, если перезайти в игре, автосейв же сохранился, в нем пишут левел)... Вылет кстати при синхронизации.

А как вообще снимать правильно координаты на локации, для перехода если на ней еще не был (только подключил)?
K.D.
Shadows, однозначно криво спавнишь переход. p_dest_gv = 3 - это же кордон. Что такое вертекс? Это точка графа игры. Считай, сетка, по которой ходят неписи. Есть локальный (уровневый) граф - для навигации неписей по локации, есть глобальный граф - для навигации неписей по всей карте. Понятно, что при компиляции всех локаций в один граф, все его точки получают уникальные значения, независимо от их нумерации до компиляции. Поэтому надо снимать номер вертекса после компиляции глобального графа. Можно проще: на Тчшном кордоне 252 вертекса. Если присоединяешь локацию после кордона, надо, значит, ко всем ранее снятым гейм-вертексам прибавить 252. Координаты и левел-вертексы, понятное дело, не меняются при сборке глобального графа.

Снять координаты для перехода можно элементарно - заспавнь актора на этой локации. Необязательно же с кордона переходить. Ну или, как вариант, в СДК закинь на локу какой-нибудь предмет, после компиляции спавна разбери его с помощью acdc и возьми координаты.
RayTwitty
K.D., большое спасибо, подключил, всё работает smile.gif
Только произошла одна неприятная вещь - в алл.спавне параметры всех объектов в игре сбиты. То есть всё оружие заспавненное на локах убитое полностью, у вещей не правильный вес и т.п. Где-то слышал про такие проблемы. В связи с этим вопрос - есть ли лечение? Не переписывать же овер9000 секций в алл.спавне вручную z_crazy.gif
K.D.
Shadows, лечение есть и весьма простое - выкинуть аивраппер и использовать вместо него xrAI для ТЧ.
RayTwitty
Цитата(K.D. @ 11.01.2012, 23:13) *
Shadows, лечение есть и весьма простое - выкинуть аивраппер и использовать вместо него xrAI для ТЧ.


А как надо юзать xrAI, чтобы скомпилить граф и спавн? Скачать скачал, а вот тутора нигде пока не нашел.
K.D.
Shadows, А ровно также, как и аивраппер. -m, -s. Смотри, как сделаны батники аивраппера для компиляции xrAI от 2588.
Veresk
Маленький вопрос: будет ли развиваться создание плагинов импорта/экспорта .object для 3Д макса? Интересуют сохранение настроек шейдеров/компила/материалов при этих операциях.
stalker petroff
Они и так сохраняются.
Veresk
да вы что laugh.gif поделитись сими волшебными плагинами
stalker petroff
Лучше вы поделитесь плагинами которые при экспорте не сохраняют настройки шейдеров материалов. Любопытно где вы их откопали, сколько не ставил плагинов и на 8 и на 11 макс - все все сохраняли.
Veresk
чрезвычано умный "еврейский" ответ. Если вам нечего сказать, то помолчите пожалуста. Если у вас такие хорошие плагинчики, то продемонстрируте мне их работу на предоставленном мной обжекте. Хотя наверно вы сейчас скажите, что увас макс не установлен и вам его качать влом laugh.gif

для импорта знаю только плагин от нео, для экспорта от него же, от бардака, от ГСЦ.
РСФСР
Подскажите пожалуйста, насколько маску для террейна надо делать прозрачной?
БогДан
По аналогии с имеющимися:
маска Кордон (белым - под сданиями, в "дырах" террейна)



Если мне склерос не изменяет: черный - полная прозрачность, белый полная не прозрачность.
РСФСР
БогДан, Нет, я имел ввиду на сколько прозрачной надо делать всю маску.
stalker petroff
чрезвычано умный "еврейский" ответ. Если вам нечего сказать, то помолчите пожалуста. Если у вас такие хорошие плагинчики, то продемонстрируте мне их работу на предоставленном мной обжекте. Хотя наверно вы сейчас скажите, что увас макс не установлен и вам его качать влом

Очень смешно. Вам практически прямым текстом написали что все работает. Но если еще непонятно - у меня сейчас два Макса установлено (8й и 2011й и еще 2008 Майя) и в обоих Максах при экспорте как статики так и динамических объектов сохраняются настроенные шейдеры/материалы. Высосали проблему из пальца еще и решаете что я скажу.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.