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

[SoC] Расчет повреждений при стрельбе по неписям


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

 Предлагаю не обманывать геймера и в конфигах брони прописывать честное fire_wound_protection = 0.0.

Чтобы не удивлялись, просто надо объяснить людям как работает механика игры. Например, добавить диалог

Сидору в начале игры. На основании bones_koeff_protection разбить броню на классы защиты от пуль и добавить в описание каждого костюма. Например:"Обычная куртка из плотной ткани с капюшоном, джинсы каких много, ботинки с высоким берцем. Как говорится: в чём пришли с гражданки, в том и воюем. Даёт некоторую защиту против порезов, осколков. Почти неэффективна против аномальных и других вредных воздействий Зоны.Защита от пуль класс 1."

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

Рот Фронт! Весьма полезная таблица, по классам защиты бронежилетов .. http://www.npo-sm.ru/stand.php


http://armo99.ru/how_to_choose/protectionclass/gostismenenija/Стандарт РФ на бронезащиту

Изменено пользователем Anders_Basymowski
  • Полезно 1

 Всем Рот Фронт! Появился у меня такой вопрос . В игре Call of Duty в конфигах оружия можно выставить, что оружие перезаряжается только после отстрела всего магазина ( параметр noPartialReload устанавливаем в " 1 " , в конфигах стволов ) . Так я сделал для пистолетов, магазиных винтовок и пистолет-пулемёта ППШ-41. Так вот, возможно ли сделать так же и в Сталкере ? 

@Shader, Тут ранее товарищ интересовался, что это за 4 кэфф.

 

 

[m_zombie_damage_normal]
;bone_name = ,-1,
; - коэфф. изменения хита (уменьшения здоровья)
; - коэфф. изменения величины открытой раны
default = 0.1, -1, 0.01
bip01_neck = 0.7, -1, 0.01
bip01_head = 1.95, -1, 0.03, 5.0

 

 

Путём проб и ошибок, а так же неоднократным отстрелом собак и новичков на Кордоне выяснил как вообще работают эти коэф-ы.

В данном случае этот 4 коэфф является дублёром 1 и обозначает множитель урона в конкретную область.

Вот на примере собаки из файла m_dog.ltx:

 

default = 0.5, -1, 0.2

bip01_pelvis = 1.0, -1, 0.5
bip01_spine = 1.0, -1, 0.5
bip01_spine1 = 1.0, -1, 0.5
bip01_neck = 1.0, -1, 1.5
bip01_head = 2.0, -1, 0.5, 10

 

 

При уроне ПМа в 0.25, (т.е. снимает 25 хп при 0 защите) наша собачка умрёт с 1 попадания в голову, т.к. коэфф урона 10, (25*10 = 250)

Но если эту 10 убрать собака будет регулярно падать с 2 попаданий в голову при уроне в 25 и защитой от пуль = 0.

Это работает для всех нпц и мутантов. 

  • Полезно 3

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

 

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

@dsh, Я тестил на практике и там всё сошлось, мб так  и есть, что он для супер пули считается. Лично у меня без этих доп. коэффоф, когда я хотел настроить урон по экзе и булату (в голову естественно) начали происходить чудеса и поэтому коэффы вернул на место. Для настройки мутантов я их все убрал - они там ни к чему, а вот для нпц оставил.

@Яр8, сейчас уточнил в исходниках. Все правильно я помню. Для не супер пули используется первый коэффициент, а для супер пули - четвертый или первый, если отсутствует четвертый.

  • Полезно 4

@Byurrer, для ГГ - отлавливать здоровье, и всякие эффекты воспроизводить...

Для НПЦ - в ТЧ анимаций необходимых нет...

Всегда считал что против брони неписей действует коэффициент k_pierce... Каково было мое удивление когда по исходникам обнаружил что это значение используется только для преград. А защиту брони снимает ТОЛЬКО параметр k_ap, которого в оригинальных конфигах вообще нет... Вот это сюрприз.

 

Формула примерно такая:

armor = bone_armor * armor_condition * (1 - k_ap)
hit = hit_power - armor

Таким образом, значение k_ap = 0 не делает ничего (дефолт), а k_ap = 1 будет полностью игнорировать защиту любой брони...

 

Upd. Формула выше действует только при попадании по ГГ в броне. Если мы стреляем по NPC то - просто отнимается bone_armor от общего урона. k_ap не учитывается.

 

Upd. Еще сила удара пули зависит от скорости, но только как отношение текущей скорость к начальной... Т.е. имеет значение не bullet_speed а потеря скорости из за пробития преград, рикошетов и т.п.

 

Upd. В секциях bones_koeff_protection для каждой кости 2 числа. Второе это коэффициент брони, bone_armor из формулы выше. Он используется только для огнестрельных ранений. А первый коэффициент используется для всех остальных, КРОМЕ огнестрельных.

Изменено пользователем phobos2077
  • Полезно 3

@phobos2077, будет тебе. Я это недавно расписывал, когда как-раз занимался переделкой формул, переписал и сталкеров, актора и монстров, и материалы зацепил. Не сильно старался вникать во все хитросплетения и выстраивать какую-ту эпохальную систему, сделал просто и ненавязчиво, но работать стало лучше, визуально, сразу скажу, мало заметно, но нужно просто потестировать модели различной крепости, конфиги покрутить и прочее.

 

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

Вот я что-то такое и нарисовал. Честно сказать уже сам не помню, хотя и недавно делал, там куча параметров учитывается и какую я там от чего зависимость менял просто не помню. Помню только, что сталкерам добавил еще один расчет для того случая, когда пуля попадает в незащищенную кость.

 

k_pierce кстати вырезал, он там учитывается только единожды в материале и прекрасно заменяется на k_ap.

 

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

Фигня. Все что я выше описал работает только при попадании по ГГ, у неписей нет брони как таковой (есть прямая ссылка на секцию в damages.ltx) поэтому вышеописанная формула к ним не подходит. И к сожалению параметр k_ap там не учитывается :(

Пичалька. И скриптами не расширить никак. Походу без патчинга движка тут никак.

 

Upd. Вот в Clear Sky вижу что они добавили учитывать этот параметр при попадании в NPC (но формула уже другая). А у меня мод на платформе ТЧ.

Изменено пользователем phobos2077
  • Полезно 1

Интересно, когда мододелы настраивают монстров то часто не учитывают его массу. Известно что живучесть зверя пропорциональна массе тела, это около 10 Дж на 1 кг тела, так что крысы самые дохлые существа Зоны, им может хватить и выстрела из пневматики, не то что из ПМ, а самые живучие это конечно псевдогиганты, этим хорошо из пулемёта стрелять, ну и самые живучие это реальные гиганты этих тварей только кумулятивной гранатой можно усмерить.

Так что получается иммунитет крыс по пулям не менее 5-10, одной пули ПМ или одной картечины хватает за глаза. Конечно и удар мутантов тоже должен быть пропорционален массе. Живучесть сталкера 700 Дж, это смертельный хит по корпусу без учёта брони. В прочим у некоторых мутантов это коэффициент может быть выше, например тот же псевдогигант, легкие пули застревают  в толстой прочной шкуре не нося какого либо урона.

В целом у модах сталкера пули реально существенно занижены, в реальности это самый существенный фактор по угоду в мир иной.

 

ЗЫ

Может попозже создам код для учёта этих всех факторов, тогда не надо будет подбирать параметры, просто вводим реальные данные ствола и данные о конституции мутанта: масса тела, прочность шкуры, степень живучести и т.д.

  • Полезно 2

 

 

данные о конституции мутанта: масса тела, прочность шкуры, степень живучести

Угум - осталось открыть Вики и прочитать эти данные.

  • Нравится 1

@_Val_, эти данные берутся из самой модели, там если толстая шкура, толщина черепа и так далее. Короче маленький мутант не может по определению быть сильно живучим, конечно надо понимать не много в физиологии, можно брать похожих животных, типа собак, волков, кабанов, слонов и так далее. К примеру контролёр не может быть сильно живучим, особенно уязвим в голову, по идеи да же сильно живучему контролёру хватит пули в голову из ПМ, не то что из АК или СВД. Но для баланса делаем его более сильным телепатом, в плоть до того что берёт под контроль самого игрока, ну да достаточно из ПМ пальнуть ему в голову, вот только ты не сможешь и в упор попасть. Конечно, я говорю про специальный мод на вроде разрабатываемого ОЛР3.0. Ну и конечно у остальных монстров сила атаки часто смертельная, но и живучесть против того же СВД с экспансивным патроном существенно меньше.

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

Но для баланса делаем его более сильным телепатом

Ровно на этом можно заканчивать все твои рассуждения. Раз, ты напишешь монструозную формулу, которая в итоге реально ничего не поменяет (лишь на толику, и скорее всего малозаметную для игрока), два, ты упоминаешь баланс, соответственно ты в каких-то моментах свои вот эти все формулы заметаешь под лавку, хотя в самом механизме они будут работать, кому нужны такие избытки? И главное, ради чего? Переделыванием одного лишь оружия ты никогда не получишь хоть какой-то реалистичности перестрелок, вот вообще ни чуть.

 

@phobos2077, во-первых у меня мод тоже на платформе ТЧ, во-вторых это действительно, как ты выразился, фигня, так как то, о чем-ты тут теоретизируешь я проверил на практике, со всеми вытекающими типа вывода в логи все чего там только возможно, и, еще раз, да, в двжике переписал. А фигня это потому, что масса времени, которое я затратил на переделывание движка, конфигов и моделей на выходе дала немного не то, что я себе фантазировал, с позиции игрока не поменялось ровно ничего, хоть тестеры и говорят "вау", но это все самовнушение вытекающее из моих слов, практика же показала, что они совершенно не в состоянии отличить модели с переделанными настройками от оригинальных. Далее. Если так ревностно подходить к этому вопросу, то нужно демеджи (я замечу, что абсолютно все), писать для каждого броника (модели) на каждый тип хита, так же переписывать "порчу" бронекостюма на покостную, вот в этом случае да, я согласен с предъявленными претензиями. А так по теории это все выглядит неспособным к обсуждению. Иными словами если этим и заниматься, то только в целях упрощения конфигов, соответственно упрощения этих формул.

  • Полезно 1
эти данные берутся из самой модели

Ты уверен, что эти данные соответствуют игровой действительности?

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

Не знаю правильную тему выбрал или нет.

По поводу damage.ltx и защиты костюмов в ТЧ.

В секции вида [body_armor_damage] в строках костей вида:

bip01_spine                  = 1.0, 0.54

оба параметра динамические и зависят от износа брони также как и статы в outfit.ltx. Покрайней мере тот что второй(броня от пуль) совершенно точно.

При этом fire_wound_protection из outfit.ltx также работает, хоть многие пишут что это не так.

 

Как я это проверял:

0)везде прописал hit_fraction = 0.00005 дабы четко поймать момент "пробития"

1)прописал для своей экзы броню тела и головы вида = 1.0, 9.00

2)прописал аналогичные секции наёмникам и бандитам на ДТ, но броню сделал "средней" = 1.0, 2.50

 

При fire_wound_immunity = 0.005(износ экзоскелета включён) проверял разные fire_wound_protection.

1)При fire_wound_protection = 0.9 изначально ГГ неуязвим, но костюм изнашивается от попаданий. С износом экзы НПС начинают "пробивать", причём первые выстрелы из мощного оружия(у меня это СВД) наносят сильно уменьшенный урон. Постепенно урон увеличивается и СВД начинает убивать с 1 выстрела.

2)Всё тоже самое но fire_wound_protection = 0.09 - а-ля куртка новичка. Всё идет также до момента "пробития": тут СВД сразу выносит с 1 попадания.

 

Вывод: fire_wound_protection совершенно точно повышает выживаемость, то есть работает тем или иным способом. Видимо сначала считается только броня из damage.ltx, а после "пробития" в дело идёт fire_wound_protection.

Почему же кажется что fire_wound_protection не работает? Я думаю из-за (как оказалось) слишком высокого hit_fraction и значений брони в damage.ltx для крутых боевых костюмов типа СКАТа или Экзоскелета.

 

При fire_wound_immunity = 0 НПС могли стрелять в меня сколько угодно: нет износа, нет падения брони, нет урона здоровью.

При fire_wound_immunity = 0.5 НПС с Кольтом всего за 5 выстрелов износил экзу до 0% и добил меня уже "голого". Но первый выстрел не нанёс урона здоровью.

 

Далее уже я стрелял в НПС. Тут уже в теме тестили и без меня. Можно хоть 150 раз из фн2000 в голову попасть, если нет "пробития", то расчёт хедшота из m_stalker.ltx даже не начинается.

Но например для "пробивающей" СВД всё происходит корректно: 6 пуль в пузо или 1 в голову.

Тут главная проблема - игрок и НПС используют одинаковые статы брони. При этом для игрока еще активны статы из outfit.ltx, которые тоже работают.

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

  • Согласен 1
33 минуты назад, Drunk сказал:

Как я это проверял:

Мне кажется, логичнее всего при подобных изысканиях просто смотреть в исходники движка, и, (при необходимости), скрипты. Смотришь что за формулы в коде - берешь в руки калькулятор и считаешь, что получается при тех или иных вводных.

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

Для любопытствующих. В OGSR расчет пулевого хита начинается тут (полагаю, в чистом ТЧ точно так же):

float CEntityCondition::HitOutfitEffect(float hit_power, ALife::EHitType hit_type, s16 element, float AP)
{
...
	if (hit_type == ALife::eHitTypeFireWound)
		new_hit_power				= pOutfit->HitThruArmour(hit_power, element, AP);
	else
		new_hit_power				*= pOutfit->GetHitTypeProtection(hit_type,element);
...

Здесь четко видно, что пулевое повреждение расчитывается отдельно от других типов. Вот эти расчеты

float	CCustomOutfit::HitThruArmour(float hit_power, s16 element, float AP)
{
	float BoneArmour = m_boneProtection->getBoneArmour(element)*GetCondition()*(1-AP);	
	float NewHitPower = hit_power - BoneArmour;
	if (NewHitPower < hit_power*m_boneProtection->m_fHitFrac) return hit_power*m_boneProtection->m_fHitFrac;
	return NewHitPower;
};

Никакой fire_wound_protection здесь не используется. А вот в

float CCustomOutfit::GetHitTypeProtection(ALife::EHitType hit_type, s16 element)
{
	float fBase = m_HitTypeProtection[hit_type]*GetCondition();
	float bone = m_boneProtection->getBoneProtection(element);
	return 1.0f - fBase*bone;
}

как раз мог бы использоваться, т.к. здесь берутся коэффициенты из m_HitTypeProtection, но только, как я выше показал, для пулевого повреждения этот метод не вызвается. Ну а если кто-то сделал, что бы вызывался, то да, fire_wound_protection в таком случае будет использоваться.

  • Полезно 2

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

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

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

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

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

Войти

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

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

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