Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Редактирование движка
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, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97
Yara
Цитата(sergy172 @ 11.09.2020, 16:46) *
Как начать этим пользоваться? Можно ли находясь в игре выбирать нужную секцию нужного конфига и сохранять внесённые изменения?

Собрать двиг или использовать готовый: https://yadi.sk/d/LJB8W22xbFsHMg
bin_b7643
Двиг 1.0007 с кучей правок (с известных репо), часть которых не заработает на ориг.геймдате. Содержит необ. минимум для запуска и настройки погоды.

***************************************

env_ambient_color 1,0,0 - ргб (255*1 - красный) - также, как в конфиге. Прога Fluid Studios Color Picker в помощь.
env_clouds_color
env_fog_color
env_hemi_color
env_rain_color
env_sky_color
env_sun_color
env_settime 12 - установить время из конфига погоды

Также имеется:
g_god
jump_to_level
run_script
run_string
time_factor_single

прибавить к текущему времени:

run_string level.change_game_time(1) дни
run_string level.change_game_time(0,1) часы
run_string level.change_game_time(0,0,1) минуты

***************************************

Изменения не сохраняются (сейв-лоад для сброса), но пишутся в лог, которые после нужно перенести в конфиг (удобнее запускать в оконном режиме).
sergy172
Yara
Блин. Я надеялся на что то более удобное. Что бы или внедрить как мод в установленную игру или что то вроде легковесного билда ТЧ-ЗП с минимумом ресурсов и маленькой картой типа мп_агропром, и конечно без работы в консоли.
Так или иначе, благодарю.
Winsor
Здравствуйте!
ТЧ, хочу добавить анимации смерти. В файл omf анимации добавлены, код с ЗП (который касается class type_motion) перенесен. Вроде все загружается, при выстреле в НПС код
CODE
float hit_angle = 0;
MotionID m = m_death_anims.motion(m_EntityAlife, *pHDS, hit_angle);

CAI_Stalker* const holder = m_EntityAlife.cast_stalker();
if (holder && (holder->wounded()))
m = MotionID();
if (m.valid())
{
xr_delete(m_interactive_motion);
m_interactive_motion = xr_new<imotion_position>();
m_interactive_motion->setup(m, m_pPhysicsShell, hit_angle);
}
if(is_imotion(m_interactive_motion))
m_interactive_motion->play(m_pPhysicsShell);

выбирает анимацию правильно. Но всего чего я смог добиться - труп "подпрыгивает" вверх при смерти... т.е. никакой анимации как на проигрывании в СДК. Те кто занимался этим вопросом - посоветуйте - что я мог забыть перенести? sad.gif
Yara
Цитата(Winsor @ 14.09.2020, 15:20) *
Здравствуйте!
ТЧ, хочу добавить анимации смерти. В файл omf анимации добавлены, код с ЗП (который касается class type_motion) перенесен. Но всего чего я смог добиться - труп "подпрыгивает" вверх при смерти... т.е. никакой анимации как на проигрывании в СДК. Те кто занимался этим вопросом - посоветуйте - что я мог забыть перенести? sad.gif

Для начала стоит проверить анимки, заспавнив нпс как физ.объект с нужной, ибо они могут просто не работать, хз почему. У меня так было, когда переносил всякую динамику с зп, анимки на сканерах аномалий работали, а вот у большого вентилятора нет (в лабе х8 такой), пересохранял по разному в тч-сдк ( и с галкой 16 бит) - результат тот же, но в сдк работают.
XinnogeN
Всем доброго времени суток! Помогите решить проблему.
При компиляции xrGame (X-Ray 1.5.10) в vs2019 вылазит вот такая ошибка:
Лог
1>D:\S.T.A.L.K.E.R\Source Code\X-Ray-1.5.10\Engine\xrGame\space_restriction.cpp(319,85): error C2664: "u32 CSpaceRestrictionBridge::accessible_nearest(const Fvector &,Fvector &,bool)": невозможно преобразовать аргумент 1 из "CSpaceRestriction *" в "T &"
1> with
1> [
1> T=CSpaceRestriction *
1> ]
1>D:\S.T.A.L.K.E.R\Source Code\X-Ray-1.5.10\Engine\xrGame\space_restriction_bridge_inline.h(24,33): message : см. объявление "CSpaceRestrictionBridge::accessible_nearest"

Строка с ошибкой
u32 CSpaceRestriction::accessible_nearest (const Fvector &position, Fvector &result)
{
if (m_out_space_restriction)
return (m_out_space_restriction->accessible_nearest(this,position,result,true));

VERIFY (m_in_space_restriction);
return (m_in_space_restriction->accessible_nearest(m_in_space_restriction,position,result,false));
}
Zagolski
Подскажите, можно аи-сетку подвинуть? Нужно подправить ее по высоте при загрузке игры. Высота ландшафта в данной мировой позиции известна, по ней просто установить ноду на нужную высоту. А то у сглаженного террейна нарушается немного позиция и аи-сетка где-то углубляется, где-то наоборот возвышается (+- 10 см). Нужно это исправить корректируя ноды аи-сетки по высоте. Или даже лучше устанавливать высоту каждой ноды прямо при загрузке локации, из карты высот.
Zagolski
Никто не поможет? У меня мозгов не хватает разобраться. Я копал, там какая-то сложная схема у позиции нодов, их высота, которая как раз и нужна, очень хитро закрученно высчитывается... Думаю, проще наверное будет стороннюю утилиту сделать, чтоб пересчитала позицию аи-сетки в самом файле. Или в СДК такую ф-цию внедрить.
macron
Zagolski, скомпили в сдк новую сетку для своего уровня.
abramcumner
Цитата(Zagolski @ 25.09.2020, 17:53) *
Никто не поможет? У меня мозгов не хватает разобраться. Я копал, там какая-то сложная схема у позиции нодов, их высота, которая как раз и нужна, очень хитро закрученно высчитывается... Думаю, проще наверное будет стороннюю утилиту сделать, чтоб пересчитала позицию аи-сетки в самом файле. Или в СДК такую ф-цию внедрить.

Да вроде ничего сложного...
Высота хранится в двух байтах. Диапазон - высота бокса уровня.
Бери ее из своей карты высот.
stalkergoshawk
Здравствуйте, подскажите по поводу тряски худа. В теме ранее SkyLoader, в сообщении #4460 описал метод решения с худом в нулевых координатах. Тестировал его кто нибудь, есть какие то проблемы, или есть другой вариант получше чтобы тряску убрать?

mortan
stalkergoshawk, отлично работает, но фикс не совместим со статикой, если на неё пофиг то можно смело использовать
XinnogeN
Всем привет! Подскажите пожалуйста, где взять файл buildvm_arch.h для сборки LuaJIT-2.1.0-beta3 ?
xrModder
Где в движке читается и обрабатывается текстуры, бампы bump и bump#?
macron
Цитата(xrModder @ 29.10.2020, 18:15) *
Где в движке читается и обрабатывается текстуры, бампы bump и bump#?

В xrRender_R2.dll. cool.gif
xrModder
Цитата(macron @ 29.10.2020, 21:25) *
В xrRender_R2.dll. cool.gif

Где именно? В каком исходнике? Не могу найти расчёт восстановления качества бампа из bump#.
macron
Цитата(xrModder @ 29.10.2020, 18:31) *
В каком исходнике?

bump# видел в xr_3da\xrRender\Texture.cpp. А так, проведи поиск в файлах по слову _bump, наверно найдется.
Modera
Цитата(xrModder @ 29.10.2020, 18:31) *
Не могу найти расчёт восстановления качества бампа из bump#.

Это делается шейдерами.
xrModder
Цитата(Modera @ 29.10.2020, 22:47) *
Цитата(xrModder @ 29.10.2020, 18:31) *
Не могу найти расчёт восстановления качества бампа из bump#.

Это делается шейдерами.

Да, уже нашел. Спасибо.
RayTwitty
Движково-скриптовый вопрос.

В движке имеется стандартный колбек на нажатие клавиши вроде
Код
g_actor->callback(GameObject::eOnKeyPress)(dik);

Есть ли возможность из колбека вернуть значение обратно в движок? Посмотрел, вроде бы таких кейсов не нашел.

Код
function actor_binder:on_key_press(dik)
    if dik == DIK_keys.DIK_S then
        return true
    end
    return false
end


Это например нужно для того, чтобы предотвратить выполнение движковых действий на нажатие клавиши. Кроме каких-то жутких костылей в голову ничего не приходит.

ЗЫ возможно намутить через вызов метода CScriptBinder, только это уже не колбек будет, а новый метод биндера всех геймобъектов...
Infaer
Здравствуйте. Подскажите, пожалуйста, может кто знает как тут поступить.
Имеется тут присвоение нулевого указателя.
Код
    if (0!=strstr(Core.Params,"-nointro")){
        m_intro_event = nullptr;
         Console->Show            ();
         Console->Execute        ("main_menu on");
        return;
    }

В рамках нового fastdelegate возникла неопределенность(is ambiguous).
Код
IntelliSense: more than one operator "=" matches these operands :
function "fastdelegate::FastDelegate<RetType (Args...)>::operator=(const fastdelegate::FastDelegate<RetType (Args...)>::BaseType &x) [with RetType=void, Args=<>]"
function "fastdelegate::FastDelegate<RetType (Args...)>::operator=(const fastdelegate::FastDelegate<void ()> &) [with RetType=void, Args=<>]"
operand types are : fastdelegate::FastDelegate<void()> = std::nullptr_t    x : \trunk\xray\xr_3da\xrGame\GamePersistent.cpp

Что в GamePersistent.h:
Код
fastdelegate::FastDelegate<void()> m_intro_event;

Есть идеи как это исправить?
Yara
Цитата(RayTwitty @ 18.11.2020, 06:11) *
Это например нужно для того, чтобы предотвратить выполнение движковых действий на нажатие клавиши. Кроме каких-то жутких костылей в голову ничего не приходит.

Видел такое: https://github.com/1exx/xray-1/commit/cc402...cd36047ee842157
RayTwitty
Цитата(Yara @ 20.11.2020, 05:06) *
Цитата(RayTwitty @ 18.11.2020, 06:11) *
Это например нужно для того, чтобы предотвратить выполнение движковых действий на нажатие клавиши. Кроме каких-то жутких костылей в голову ничего не приходит.

Видел такое: https://github.com/1exx/xray-1/commit/cc402...cd36047ee842157

Здесь просто блокировка кнопки (экшена), это не то.

У меня вызов колбека на нажатие идет в самом начале иерархии вызовов обработчика клавиатуры (CLevel::IR_OnKeyboardPress), ниже моего вызова идет обработка всего остального, в том числе UI-обработчиков. ПЫС, для того чтобы прекращать выполнение дальнейших функций после нажатия кнопки (к примеру, если открыли инвентарь на I, то если что-то ниже по коду еще зашито на эту кнопку, то выполняться оно не будет). Именно поэтому во всех скриптовых меню OnKeyboard возвращает булевое значение, которое означает что клавиатура захвачена конкретным меню и всё остальное идет лесом.

Вот тоже самое нужно сделать со скриптовым колбеком, но он насколько я понимаю не возвращает значения обратно из скриптов. Мне это всё нужно в частности, чтобы при открытии скриптового окна по кнопке из колбека, при инициализации окна не отрабатывал OnKeyboard. Одним из решений является перенос вызова колбека ниже
Код
if ( b_ui_exist && pHUD->GetUI()->IR_OnKeyboardPress(key)) return;

но в таком случае колбек не будет работать если открыта хоть одна менюшка, что мне тоже не подходит.

Пока я нашел 2 варианта - новый метод класса CScriptBinder с вызовом из CActor или так, как пыс сделали extrapolate_callback у НПС. Склоняюсь больше ко второму варианту.
Никсон
Вопрос: кто-нибудь переносил на ТЧ систему ".anm" эффектов для худ анимации оружия? Если да, то хотелось-бы глянуть коммиты : )
Yara
Цитата(RayTwitty @ 20.11.2020, 08:38) *
Мне это всё нужно в частности, чтобы при открытии скриптового окна по кнопке из колбека, при инициализации окна не отрабатывал OnKeyboard.

А если сделать функцию (enable / disable_input_ui biggrin.gif ), схожую с level.disable_input (переключает булеву g_bDisableAllInput), и добавить её проверку в ::OnKeyboard для каждого элемента в папке ui. Потом добавлять функцию отключения в ui_my:__init() super() и включения, вроде, в :__finalize(). Может и ошибся, но больше идей нет.
RayTwitty
Цитата(Yara @ 20.11.2020, 12:13) *
Цитата(RayTwitty @ 20.11.2020, 08:38) *
Мне это всё нужно в частности, чтобы при открытии скриптового окна по кнопке из колбека, при инициализации окна не отрабатывал OnKeyboard.

А если сделать функцию (enable / disable_input_ui biggrin.gif ), схожую с level.disable_input (переключает булеву g_bDisableAllInput), и добавить её проверку в ::OnKeyboard для каждого элемента в папке ui. Потом добавлять функцию отключения в ui_my:__init() super() и включения, вроде, в :__finalize(). Может и ошибся, но больше идей нет.

Не прокатит, по стеку вызовов условный "disable_input" отработает только при следующем вызове CLevel::IR_OnKeyboardPress. Да и это костыль. Тоже самое можно и внутри скриптов сделать.
ForserX
Цитата(Infaer @ 19.11.2020, 16:18) *
В рамках нового fastdelegate возникла неопределенность(is ambiguous).

О, прикручивал когда-то. Могу сказать только одно: возьми xrDelegates от RoH. Они куда лучше, имхо
mortan
Обнаружил странный баг, который есть даже в ванили - попробуйте подойти к скадовску, заспавнить себе допустим 3 свд, пострелять с каждой пару раз, зайти продать Сычу, сохраниться, загрузиться - свд никуда не пропадут, хотя лист торговли должен обновиться.
Пофиксил так:
Это в InventoryOwner.cpp
mortan
Причем иногда смена локации помогает с такими "засисшими" итемами, а иногда - нет.
RayTwitty
Цитата(mortan @ 01.12.2020, 20:29) *
свд никуда не пропадут, хотя лист торговли должен обновиться.

Всмысле 3 СВД будут в торговле? Насколько я понимаю, твоя правка убирает из продажи оружие из слотов НПС.
mortan
RayTwitty, не совсем так - это удаление старого ассортимента перед добавлением нового, удаляется всё что лежит вне слотов, но проверку дополнительную дописать забыли. У них по какой-то причине если даже бросить на землю итем то в CurrSlot останется старый слот...
Infaer
Здравствуйте. Как известно, в начале 2005 года разработчики реализовали такую фишку, как эффект соприкосновения ГГ с материалами. Воспроизводился партикл пыли и звук из библиотеки материалов material\human\collide\clothes.ogg(лежит и в релизе вроде как). Но от этой фичи быстро отказались. Осталось ли что-то в движке от этого? Может кто восстанавливал?
macron
Infaer, по логике, скорее это не движок, а настройки из gamemtl.xr (материалов). Редактируя в SDK или вручную декомпилировав через конвертер материалов, можно настроить такие эффекты взаимодействия.
RayTwitty
Стало интересно какого цвета есть сообщения в логе игры и какой цвет обычно выбирался разработчиками в различных случаях.

Консоль поддерживает 6 цветов:

"-" Зеленый - информационные сообщения, которые хочется ярко выделить среди других.
"!" Красный - ошибки, критические сообщения, требующие внимания.
"~" Желтый - предупреждения, некритические вещи, тем не менее, тоже требующие внимания.
"*" Серый - в основном статистика движка, сколько полигонов, текстур, вершин и прочее. Большинство строчек лога именно этого цвета.
"#" Бирюзовый - какие-то сообщения в мультиплеере, в движке встречается крайне мало.
Белый - обычное информационное сообщение, иногда по смыслу может перекликаться с серым или зеленым цветом. По умолчанию текст сообщения именно этого цвета (без префикса).

Разработчики, в целом, не особо заморачивались, поэтому иногда цвет сообщения выбирался не по смыслу, а просто чтобы "выделить здесь и сейчас".
Никсон
Цитата(Никсон @ 20.11.2020, 11:04) *
на ТЧ систему ".anm" эффектов для худ анимации оружия


Чекнул недавно репозиторий ЛА, и нашёл, что искал

В который раз убеждаюсь, что Скай - просто золотце happy.gif

https://bitbucket.org/sv3nk/la-code/commits...f1ab06831a57462

RayTwitty
Столкнулся с небольшой непоняткой с флагами.

В движке у ламп есть следующие флаги Flags16 flags:
Код
flPhysic                    = 1
flCastShadow                = 2
flR1                        = 4
flR2                        = 8
flTypeSpot                    = 16
flPointAmbient                = 32

(для простоты сразу перевел в 10-ую систему). Я добавил новый флаг в конец перечисления
Код
flMyFlag                = 64

Всё отлично работало до тех пор, пока дело не дошло до объектов, перенесенных из билдов (у них мой новый флаг игра видит как всегда установленный). Распаковал спавн через ACDC, у ванильных объектов параметр флагов выглядит следующим образом:
Код
light_flags = 0x2a

и простым калькулятором вполне несложно вычислить, какие флаги установлены. Но у билдовских объектов флаги выглядят так:
Код
light_flags = 0xb548
или так
light_flags = 0xb57b

и тут я уже чето невкурил. Хотя игра все эти флаги (ну кроме моего) вроде бы нормально переваривает. Как их считать? Такое ощущение, что в билде были заняты последние биты, но тогда по идее ваниль не должна их прочитать... В конструкторе серверного объекта по дефолту установлено три флага:
Код
flags.assign                (flTypeSpot|flR1|flR2);
остальные должны быть по нулям...
abramcumner
Цитата(RayTwitty @ 19.12.2020, 00:14) *
Как их считать?

Ну точно также они считаются:
0xb548 = 0xb500(какой-то мусор) + 64 + 8 = ... + flMyFlag + flR2
0xb57b = 0xb500 + 64 + 32 + 16 + 8 + 2 + 1 = ... + flMyFlag + flPointAmbient + flTypeSpot + flR2 + flCastShadow + flPhysic
И там и там твой новый флаг установлен.

Движок из 16 возможных флагов обрабатывает 7, остальные игнорирует.
А откуда у тебя такой спавн? То же асдс собирал? По-видимому криво обрабатываются билдовские лампы. Или классы перепутаны, может это вообще и не лампы? smile.gif

Цитата
В конструкторе серверного объекта по дефолту установлено три флага

Неважно же, что в конструкторе, из all.spawn читаются кривые флаги.
RayTwitty
Цитата(abramcumner @ 19.12.2020, 00:40) *
А откуда у тебя такой спавн? То же асдс собирал?

Универсальный ACDC 1.27 от KD, спавн 2571 билда.

Я кстати заметил, у тех объектов у которых такие флаги, добавлялся в секцию параметр s_flags = 0x23, впрочем это уже вопрос к ACDC.

Цитата(abramcumner @ 19.12.2020, 00:40) *
Движок из 16 возможных флагов обрабатывает 7, остальные игнорирует.

А как он понял, какие мусор? Ну грубо говоря ему нужно отнять 46336.
abramcumner
Цитата(RayTwitty @ 19.12.2020, 00:54) *
А как он понял, какие мусор? Ну грубо говоря ему нужно отнять 46336.

Движок и не разбирается, где мусор, а где нет. Он просто и не обращается к старшим битам.
0xb57b = 0b101101010'1111011. Движок работает с правыми(младшими) 7 битами, а левые(старшие) 9 его даже не интересуют. Ничего отнимать не надо, просто проверяет установлен или нет соответствующий бит.
Код
            flMyFlag          = 64 = 0b1000000
            |flPointAmbient   = 32 = 0b0100000
            ||flTypeSpot      = 16 = 0b0010000
            |||flR2           =  8 = 0b0001000
            ||||flR1          =  4 = 0b0000100
            |||||flCastShadow =  2 = 0b0000010
            ||||||flPhysic    =  1 = 0b0000001
            |||||||
0b101101010'1111011 = 0xb57b

Установлены все флаги, кроме flR1. Если от него спуститься вниз, упираешь в нолик.

Цитата
Универсальный ACDC 1.27 от KD, спавн 2571 билда.

Не староват? Точно есть 1.38, а может и старше. И точно в билде 2571 эти секции лампочки? Проверить бы конфиги от него.
RayTwitty
Цитата(abramcumner @ 19.12.2020, 01:18) *
0xb57b = 0b101101010 1111011. Движок работает с правыми(младшими) 7 битами, а левые(старшие) 9 его даже не интересуют.

То есть бага тут никакого нет и вопрос лишь заключается в том, почему 7 флаг в 2571 был установлен? Может какие-то тестовые флаги были на тот момент, которые к релизу порезали...

Цитата(abramcumner @ 19.12.2020, 01:18) *
Не староват? Точно есть 1.38, а может и старше. И точно в билде 2571 эти секции лампочки? Проверить бы конфиги от него.

Эти лампочки переносились еще при царе горохе, на тот момент 1.27 был видимо актуален biggrin.gif А косяк всплыл спустя 8 лет совершенно случайно, когда уже движок начали править. Это хорошо что у меня все бекапы остались вплоть до распакованных спавнов и ридми к ним, можно проследить цепочку событий.

Цитата(abramcumner @ 19.12.2020, 01:18) *
И точно в билде 2571 эти секции лампочки?

Да, например объект с именем lamp0004 в подземке Агропрома.
abramcumner
Цитата(RayTwitty @ 19.12.2020, 01:26) *
почему 7 флаг в 2571 был установлен?

Да.
xrModder
Как убрать подобного рода предупреждения?
Код
Microsoft Visual Studio 10.0\VC\include\complex(###): warning C4995: cos: имя помечено как #pragma deprecated

Код
Microsoft Visual Studio 10.0\VC\include\xcomplex(###): warning C4995: sin: имя помечено как #pragma deprecated
XR_CPU_PIPE.DLL
Парни, как я давно тут не был то...
Слушайте, а что вы намудрили с движком то в последнее время?
xrModder
В исходниках есть код вроде:
Код
void Update()
{
    if (Device.dwFrame % 30)
    {
        ...
    }
}

Это типа обновит через каждый 30 кадров?
ForserX
xrModder, yep

Эти предупреждения захардкоржены вроде бы в xrCore.h, можешь их просто убрать.
Либо юзай std::cos/std::sin, либо cosf/sinf
XinnogeN
На конец сбылась моя мечта! Собрал оригинальный движок 1.5.10 в Visual Studio 2019.
Там всё оригинально, только лишь удалил STLPort и использовал DirectX за Июнь-2010.
Остальное осталось как и прежде, были лишь исправлены ошибки компиляции.

Версия Visual Studio 2019 - 16.8.3
Версия Net Framework - 4.8
Версия Windows SDK - 10.0.19041.0

В общем - со всеми последними актуальными компонентами!!!

Особая благодарность за помощь в компиляции движка и за исправления ошибок:
abramcumner
ForserX
xrModder
XR_CPU_PIPE.DLL
XinnogeN
Сталкер ЧН 1.5.10 Выставляю в настройках Улучшенное полное освещение (DX10).
И вылет окошка с надписью your video does not meet game requirements pixel shaders v1.1 higher reguired . В оригинальной игре всё работает.
macron
Цитата(XinnogeN @ 10.01.2021, 19:11) *
Выставляю в настройках Улучшенное полное освещение (DX10).
И вылет

Держи, засунуть в bin
https://yadi.sk/d/r1AuJUoYUCgSQw

Если в главном меню видно мыло, еще дважды выполнить vid_restart в консоли.
XinnogeN
macron,
Теперь вот: failed to initialize graphics hardware
macron
Цитата(XinnogeN @ 10.01.2021, 16:48) *
Собрал оригинальный движок 1.5.10 в Visual Studio 2019

Стоп, ты на собранном что ли тестишь? Тогда вообще хз. Спроси на amk.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.