Перейти к контенту
Zander_driver

OGSE: КБ разработчиков

Рекомендуемые сообщения

"Конструкторское бюро" OGSE.
Все о платформе, разработке, использовании материалов Old Good Stalker Evolution, а также всяческие предложения по дальнейшему развитию.

 

Исходники ogse.dll: https://yadi.sk/d/smv9hMa3gqGf5


Собирать только VS 2005 или VS 2008. В противном случае не взлетит.
Вроде бы внешних зависимостей никаких, необходимые файлы уже включены в проект.

 

Создаете файл с именем level.puddles в папке с нужной локацией. Открываете файл в текстовом редакторе и вносите туда записи вида:



[south_blockpost]
center = -84.61,-34.95,-347.90
max_depth = 0.5
radius = 30

[south_blockpost] - имя. Никакой роли не играет, служит лишь для ориентирования. Должно быть уникальным в пределах одного файла.
center - координаты центра лужи на локации
max_depth - максимальная глубина лужи. Выбирается таким, чтобы актор в самом низком присяде не смог в нее "нырнуть" с головой.
radius - размер лужи.
 
Определение координат для луж несколько заморочено. Связано это с тем, что не в любом месте можно поставить лужу - она может быть лишь в локальном углублении. Для выявления таких углублений предлагаю следующий вариант (именно им пользовался я). Декомпилируете локацию, загружаете в сдк. Удаляете ВСЕ объекты, кроме террейна, далее работаете только с ним. В свойствах террейна увеличиваете его вертикальную координату так, чтобы координатная сетка в сдк была полностью под ним. Затем понемногу "опускайте" террейн обратно. В тех местах, где будет появляться координатная сетка, и будут находиться локальные углубления. Киньте там калаш (или другой объект), узнаете координаты. Для большей заметности помогает сделать сетку "погуще".
Другой способ предложил Deathdoor. Сделайте очень большую плоскость в майке, обтяните заметной текстурой. Потом вставьте ее на локацию в LE под террейн, ну и двигайте потом вверх. Принцип аналогичен вышеописанному - там, где будет проступать плоскость, там локальное углубление.

 

При реализации этих эффектов довольно быстро стало понятно, что далеко не каждый источник света с ними выглядит хорошо. Потому была внедрена система пообъектной настройки фларов и объемного света. Для каждого источника можно включать или выключать эти эффекты отдельно двумя способами:
1) В all.spawn. Найдите секцию лампы, возьмите оттуда light_flags. Объемный свет включается путем выставления в light_flags флага 0x40, флары - флага 0х80. Выключаются эффекты снятием соответствующих флагов. Модифицируете флаг, собираете спавн, начинаете новую игру, наблюдаете появившиеся эффекты. Можно новую игру и не начинать, тогда перепишите нет-пакет лампы скриптом в игре. Для новичков в hex-исчислении: открываете виндовый калькулятор, переключаете в программистский режим, выбираете режим Hex. Выставление флагов производится функцией Or, снятие - функцией Xor.
2) В СДК. Поскольку расставление эффектов является больше дизайнерской задачей, сделал небольшую правку СДК: https://yadi.sk/d/3ZujqzlMgqJ6p. С ней просто запускаете LE, в опциях спавн-объекта лампы появятся флажки Enable Flare и Volumetric.

 

Прежде всего, понадобится утилитка, изготавливающая объемный туман, понимаемый OGSE-модом: https://yadi.sk/d/NXAUhXucgqJfP
Далее:
1) Запилите в 3d редакторе модель тумана и экспортируйте ее в obj. Вот простенькая модель, если кому лень запускать майку: https://yadi.sk/d/jvrU3XDjdSRvw
2) Создайте папку meshes в папке с fvolume_maker;
3) Скиньте модельку туда;
4) Запустите fvolume_maker. Параметры для батника:
-config <string> файл с конфигом объемов. Если не указано - будет fvm_config.ltx
-source <string> файл, куда сохраняем готовые объемы. Если не указано - будет level.fvolumes
-append <true|false> экспериментальная опция, позволяет не переписывать, а дополнять существующий файл *.fvolumes
Про файл конфигов. Он содержит записи вида:
[test]
position = 0.267,2.688, 91.776
rotation = 0.0,0.0,0.0
scale = 1.0,1.0,1.0
 
Все очевидно. Имя секции - имя вашей модельки. Position, rotation - позиция тумана на локации и поворот относительно осей.
Scale - растяжение модельки тумана по осям.
 
5) После окончания работы программы получится файл level.fvolumes. Нужно запихать его в папку с локацией. Для каждой локации такой файл нужен отдельный.
6) Правите конфиг туманов. Это файл config/environment/fog_volumes.ltx. 
Он содержит записи вида:
[test]
color = 1.0,1.0,1.0,1.0
max_density = 0.5
Тут еще очевиднее, чем раньше. Color - цвет тумана, max_density - плотность тумана. 
1 - ничего не видно через 1 метр, 0,5 - ничего не видно через 2 метра, и т.д. Обратная зависимость, короче.
7) Включаете опцию r2_volumetric_fog, загружаете локацию и ищете свой туман на локе.
 
Для удобной настройки есть консольная команда reset_fv. При ее вызове применяются изменения color и max_density.

 

Для создания и редактирования диалогов очень удобно пользоваться редактором диалогов за авторством Mlandrinus: https://yadi.sk/d/qmUaU5VIgqKCh. Кидаете в папку со сталкером, запускаете, дальше все в целом понятно. Конфиги должны быть распакованы.

 

Вид текстур в тепловизоре определяется настройкой material в textures.ltx. Имеется два пресета - для морд/тел/брони и для оружия. По сути, различие между пресетами заключается в том, что оружие при стрельбе греется и это учитывается. Если вы хотите применить для текстуры пресет для тела неписей, поставьте material в пределах 0,6-0,7. В данном случае 0,6 - холодная геометрия, 0,7 - горячая. Для оружия применяйте диапазон 2,85-2,95. Впрочем, в случае оружия лучше ставить всегда минимум (2,85), чтобы нормально выглядел эффект нагрева оружия.
Цвета в тепловизоре также можно настроить. Откройте shaders/r2/ogse_config.h. За цвета отвечают параметры IKV_DEAD_COLOR (цвет холодной геометрии), IKV_LIVE_COLOR (цвет горячей геометрии), IKV_MID3_COLOR, IKV_MID2_COLOR, IKV_MID1_COLOR (промежуточные "опорные" цвета). Все параметры приведены в RGB, подбирайте где-нибудь в пэинте.
Далее можно не читать, если вы не понимаете, для чего в игре параметр material. Если же вы понимаете и негодуете насчет того, что приходится менять ваши любимые настройки текстур ради тепловизора, внимайте.
Интервал значений material для тепловизора также можно изменить. За это отвечают параметры IKV_PRESET_1_MIN, IKV_PRESET_1_MAX (первый пресет) и IKV_PRESET_2_MIN, IKV_PRESET_2_MAX (второй пресет) в том же ogse_config.h. Правило конвертации - в ogse_config.h вносится значение (material + 0.5) / 4. Т.е., если нижний предел для первого пресета у вас 0,8, то IKV_PRESET_1_MIN назначаете равным (0,8+0,5)/4 = 0,325. Выглядит, странно, да, но вот так работает движок. И не без причины.

 

Есть такие консольные команды:
Цветокоррекция: r2_color_grading [0.0, 0.0, 0.0, 0.0]
Известный эффект, "подкрашивает" картинку на экране в выбранный цвет. Поставьте какой-нибудь синий цвет, мигом узнаете ранние Battlefield. Фича мощная, однако, требует некоторых усилий дизайнеров, поскольку цвет должен зависеть от локации и игровой ситуации.
 
Оптимизация отрисовки травы: r2_details_opt [0.0, 0.0, 0.0]
Три параметра, все три - расстояние в игровых метрах. Смысл такой: в игре трава рисуется квадратами 2х2, т.е. в одном "гнезде" четыре куста травы. С этим параметром по достижении первого расстояния перестает рисоваться один куст из четырех, по достижении второго - два куста из четырех, по достижении третьего - три куста из четырех. При тщательной настройке позволяет сберечь фпс без ухудшения картинки.

 

 



  • http://www.amk-team.ru/forum/uploads//ratings/bf.gif × 5
  • http://www.amk-team.ru/forum/uploads//ratings/wrench_orange.png × 3

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Romann   
22 минуты назад, ed_rez сказал:

что таким же успехом можно косточки увести под землю. Не прав?

А если непись будет бродить по второму этажу(к примеру на Агро) - идёшь ты по первому -> и мимо проплывает прицел с прикладом.:facepalm:


  • http://www.amk-team.ru/forum/uploads//ratings/lol.png × 1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
56 минут назад, dsh сказал:

Как минимум, не реализован коллбек перед обработкой хита и я сильно подозреваю, что есть ещё не реализованные фичи.

Нету имитации нажатия/удерживания/отпускания клавиши и еще нужно проверить получение и установку всех свойств актора( db.actor:get_actor_condition_float(float), db.actor:set_actor_condition_float(float), db.actor:get_actor_float(float), db.actor:set_actor_float(nil, new_value ,float)).

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
ed_rez   

@Romann ,

я же в виде "костыля" и в шутку. А технически можно увести хоть 100500 локаций в сторону. Понятное дело, что это не решение. Нужно нормально делать, а не "костыли" подставлять.


  • http://www.amk-team.ru/forum/uploads//ratings/tick.png × 1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
sto1en   

Вот, крупнее:

efcba903a2act.jpg

И тоже как-то рандомно не скрывает.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
dsh   
51 minutes ago, Mr. Moderator said:

что из-за этого

Ну, это можно попробовать задефайнить в движке, что бы переключаться между старым и новым.

 

А вот этот коммит не понял: https://github.com/KRodinn/OGSE_0693_Optimized/commit/be4597706496ba810682b3f4f4754c6879b4b932

В коммите никакой table.insert() не фигурирует. Или не работает конструкция

t.prop = nil

?

 

56 minutes ago, Mr. Moderator said:

Ну и при переходе на исходники надо избавляться от от всяких m_net_utils, amk_netpk и прочих кривых скриптов

Это-то конечно да, но когда в анамнезе костыли АМК + солянки + ОП-2...

 


  • http://www.amk-team.ru/forum/uploads//ratings/thumb_up.png × 1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
dsh   
14 minutes ago, TIGER_VLAD said:

db.actor:get_actor_condition_float(

Скорее всего, все _float() _int() и т.п. не реализованы. Нужно менять на прямое использование экспортированных свойств и экспортировать недостающие.

 


  • http://www.amk-team.ru/forum/uploads//ratings/thumb_up.png × 1
  • http://www.amk-team.ru/forum/uploads//ratings/tick.png × 1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
KRodin   
1 минуту назад, dsh сказал:

В коммите никакой table.insert() не фигурирует

https://github.com/KRodinn/OGSE_0693_Optimized/blob/be4597706496ba810682b3f4f4754c6879b4b932/gamedata/scripts/ogse_st_mgr.script#L353
Если там self._high_priority == nil, то в таблицу ничего не добавится, и сработает ASSERT тут: https://github.com/KRodinn/OGSE_0693_Optimized/blob/be4597706496ba810682b3f4f4754c6879b4b932/gamedata/scripts/ogse_st_mgr.script#L266
Именно поэтому в том коммите я делаю:

self._high_priority = not not high_priority

После этого всё работает нормально.


  • http://www.amk-team.ru/forum/uploads//ratings/thumb_up.png × 1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
KRodin   
21 минуту назад, dsh сказал:

Ну, это можно попробовать задефайнить в движке, что бы переключаться между старым и новым.

Посмотрю, что там можно сделать.


  • http://www.amk-team.ru/forum/uploads//ratings/bf.gif × 1
  • http://www.amk-team.ru/forum/uploads//ratings/thumb_up.png × 1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
dsh   
1 hour ago, Mr. Moderator said:

Именно поэтому в том коммите я делаю:

Ага, теперь понял. У нас оно уже немного отличается. У меня делается

  self._high_priority  = false

т.к. оставлено по историческим причинам и больше не используется.

 


  • http://www.amk-team.ru/forum/uploads//ratings/thumb_up.png × 1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
dsh   

@Mr. Moderator сейчас собирал движок, ругалось на отсутствие dxerr.lib и d3dx9.lib. Пока я их вручную не скопировал из проекта KD, движок не собирался. Это так и должно быть или я что-то не сделал?

 


  • http://www.amk-team.ru/forum/uploads//ratings/thumb_up.png × 1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
KRodin   

@dsh Сейчас я эти файлы в репо добавлю. У меня DirectX SDK установлен, и эти файлы берутся из него. А у тебя походу нет.


  • http://www.amk-team.ru/forum/uploads//ratings/thumb_up.png × 1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
dsh   

@Mr. Moderator уже вижу, спасибо. DirectX SDK не входит в Windows 10 SDK, его нужно отдельно ставить? У меня стоят все версии Windows 10 SDK, которые VS предлагает к установке.

 

Еще при запуске ругалось на d3dcompiler_47.dll, на его отсутствие. Скопировал его из старого движка.

 


  • http://www.amk-team.ru/forum/uploads//ratings/thumb_up.png × 1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
KRodin   
23 минуты назад, dsh сказал:

его нужно отдельно ставить?

Нет.

 

24 минуты назад, dsh сказал:

Еще при запуске ругалось на d3dcompiler_47.dll, на его отсутствие.

Скорее всего криво установлены рантаймы DirectX. У меня нормально запускается.


  • http://www.amk-team.ru/forum/uploads//ratings/thumb_up.png × 1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
dsh   

@Mr. Moderator я начал потихоньку добавлять в движок не достающее. Но так как я в этом плохо разбираюсь, то копирую из xp-dev. Сейчас занимаюсь копированием доступа к свойствам еды, актора и т.п. Судя по всему, движок OGSR очень сильно кастрирован. Не только по сравнению с xp-dev, но и по сравнению с xray extenstions. Вообще, видя такое, у меня возникает ощущение, что возиться с движком OGSR - это не сильно перспективное занятие. Возможно, перспективнее в xp-dev добавить то, чего там не хватает для OGSE.

 


  • http://www.amk-team.ru/forum/uploads//ratings/thumb_up.png × 1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
KRodin   
20 минут назад, dsh сказал:

Возможно, перспективнее в xp-dev добавить то, чего там не хватает для OGSE.

Я пытался, полгода назад где-то.
Там работы ещё больше, на мой взгляд.
А вообще, чего не хватает? Если что, пиши в ЛС, может подскажу чего.
Я тоже буду постепенно добавлять кое-что.


  • http://www.amk-team.ru/forum/uploads//ratings/thumb_up.png × 1

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
dsh   

@Mr. Moderator в данный момент не хватает прямого доступа к свойствам, которые загружаются из конфигов. Для еды, например, это eat_health, eat_radiation и другие eat_. Для актора - всякие sprint_koef и т.п. Это я уже скопировал из xp-dev, завтра запушу, посмотришь, правильно ли все, а то я почти наощупь это делаю. Для брони доступ ко всем свойствам нужен, для артефактов тоже самое. Сегодня ещё обнаружил, что нет методов is_actor_sprinting(), is_actor_climbing() и т.п. Уже придумал, как и куда добавить, т.к. в xp-dev их тоже нет. Завтра, думаю, смогу добавить. Ещё несколько функций из level не хватает. Например level. vertex_id( pos ). Наверняка ещё что-то.

Изменено пользователем dsh

  • http://www.amk-team.ru/forum/uploads//ratings/thumb_up.png × 2

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
dsh   

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти

  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

×