Участвуют след. параметры:
1. hit_power - мощность ствола из файлов параметров стволов
2. k_hit - мощность пули из weapons.ltx для каждого типа патронов
3. k_ap - способность пули пробивать защиту (куртки, броники и т.п)
4. Секции [body_damage_*] и [head_damage_*] из damages.ltx с набором
параметров bip01_* - определяет прочность защиты на каждой части тела (второй параметр).
Далее эти параметры я обозначу как Bd и Hd.
5. hit_fraction из damages.ltx для каждого типа защиты определяет прочность защиты.
Надо упомянуть что параметры броников неписей определяются из файла damages.ltx,
а не из outfit.ltx (этот файл чисто для ГГ).
6. Секция [stalker_damage] из m_stalker.ltx с набором параметров bip01_* - определяет фактор
уменьшения здоровья при попадании в соответсвующую часть тела (первый параметр).
Далее этот параметр я обозначу как Sd.
Далее я опишу алгоритм по которому происходит вычисление повреждений.
Алгоритм был получен опытным путем при стрельбе по неписи в упор и не претендует на истину в последней инстанции.
Контроль количества повреждений производился через hit_callback функцию скрипта.
1. Здоровье неписи лежит в диапазоне от 0 до 100%.
2. Если пуля не бронебойная (k_ap = 0) то урон здоровью вычисляется как:
hit_power * k_hit * hit_fraction * Sd * 100
Полученное число вычитается из здоровья неписи и при достижении <=0 - непись убита.
Т.е. учитывается только фактор защиты в целом без учета степени защиты на разных частях тела.
3. Если пуля бронебойная (k_ap > 0), то ее фактор повреждения зависит от того пробила пуля защиту или нет.
Если пуля не пробила защиту ( k_ap <= Bd(Hd) ) то повреждения считаются как в п.2.
Если пуля пробила защиту ( k_ap > Bd(Hd) ) то повреждения считаются как:
Вычисляется 2 числа и берется большее:
hit_fraction * Sd * 100
и
hit_power * k_hit * F * Sd * 100 где F = (k_ap-Bd)/k_ap или F = (k_ap-Hd)/k_ap
Интересно что урон здоровью в случае пробития брони бронебойной пулей никак не меньше чем фактор ослабления пули броней (hit_fraction * Sd * 100).
И еще о k_ap. Было замечено странное поведение алгоритма расчета урона при значении этого коэффициента выше 0.75.
Пуля наносит как бы двойное повреждение. Одно как бронибойная пробивая защиту, и другое - как не бронибойная пуля.
В результате совокупный урон неписю может составляеть больше чем 2 * hit_power * k_hit * 100.
Скорее всего глюк в игре. Получается, например, при k_ap = 0.75 непись получает 70% урона, а при k_ap = 0.76 - безуслованя смерть.
К тому же этот эффект пропадает, например, при определенных сочетаниях hit_power * k_hit >= 1 и k_ap > 2.2
Так что лучше k_ap ограничить максимум 0.75
Теперь что касаемо пробивания препятствий:
Похоже что параметр k_pierce не используется вообще (наверное пришел из ТЧ). За пробиваемость препятствий отвечает также k_ap.
Вот некоторые его значения:
>0.34 - пробивает тонкие фанерки (двери и т.п.)
>1.0 - пробивает листовой металл
>1.5 - пробивает деревянные брусья и стены деревянных домов
Ну а гаусска с ее k_ap=15 шьет все.
Ты-ы-ыкс, вот мы добрались и до стрельбы неписей по ГГ. Алгоритм тот же самый.
В качестве hit_fraction выступает hit_fraction_actor из outfit.ltx для каждого костюмчика. Повреждения по частям тела расписаны опять же в
damages.ltx в секциях [actor_damage_N]. Ссылки на секции повреждений в параметрах bones_koeff_protection из outfit.ltx для каждого костюма.
Параметр fire_wound_protection не используется.
В инвентаре пулестойкость костюма отображается на основе второго значения из bip01_spine параметра из соответсвующей секции в damages.ltx.
Теперь о гранатах. У гранат два поражающих фактора - взрывная волна и осколки.
1. Взрывная волна описана двумя параметрами:
blast - кэффициент поражения
blast_r - радиус поражения в метрах
Максимальный урон здоровью в процентах от ударной волны определяется по формуле (blast - explosion_protection) * 100, где explosion_protection - параметр костюма.
Если получилось отрицательное число, то урона нет. Наносимый урон падает пропорционально расстоянию от ГГ до гранаты в пределах blast_r.
Неписи никак своим костюмом не защищены от гранат и для них урон равен blast * 100.
2. Разлет осколков описан 3мя параметрами:
frags - количество осколков
frags_r - радиус разлета
frag_hit - коэффициент поражения каждого осколка
Осколки наносят поражение в пределах frags_r как небронебойная пуля с k_hit * hit_power равным frag_hit (если конечно осколок попал в непись или ГГ).