Приветствуем, геймер! Ты можешь или
16+
Ava

Геймер Allin 36

129

Как это работает. Шанс Попадания в цель.

Это для тех, кому действительно интересно разобраться. Осилить это сможет не каждый, и требует вознаграждения, потому, как это сейчас модно эвент:

В тексте вы найдете некий код, если вы еще и играли в JA2, то вам не составит труда в комментарии написать, что он означает. Победитель получит 3 моих плюса (+5) в своих постах (осмысленных). Я бы медаль давал, но не уверен, что получу ее сам за этот пост :)

Автор благодарит тех, кого уже благодарил:

Спойлер
В упрощенном и приближенном виде мы можете ознакомиться с этими данными тут.

Данная статья содержит огромное количество формул, поэтому самые одиозные я я скрыл спойлерами. Если вы их поймете - вы круты, я сам иногда путаюсь :)

Для начала определимся с терминологией:

    Стрелок (Shooter): Тот кто стреляет, к чьему действию применяется формула

    Местонахождение цели (TargetLocation): Точка, в которую происходит прицеливание. Это не обязательно может быть враг, как это работает мы расмотрим ниже.

    Часть тела цели (Целевая_Часть_Тела): Часть тела противника, которую пытаются поразить. Однако при стрельбе в лежащего противника или танк это значение будет равно "none".

    Уровень прицеливания (AimTime): Количество дополнительных АР, использованных для прицеливания.

Вооружившись этими параметрами начнем рассматривать вычисления.

____________________________________________

Для начала, программа проверяет, есть ли у стрелка Меткость(Marksmanship):

Код:

Если Меткость_Стрелка = 0, то

Шанс Попадания = 0, вычисления прекращаются.

Далее программа проверяет, не используется ли на оружии мощных прицелов:

Код:

Для каждого Аттача на оружии, выполнить

Если Аттач дает более +14 бонуса прицеливания, то

используется мощный прицел.

Иначе

не используется мощный прицел.

Таким образом, мы узнали, что если прицел дает +15 и более бонус прицеливания - он считается иначе, чем все остальные. Эффекты от таких прицелов мы рассмотрим ниже.

____________________________________________

Теперь программа проверяет состояние оружия и вводит модификатор, в зависимости от его значения.

Код:

Если Состояние Оружия больше или равно 85, то

Модификатор Состояния = 100

Иначе

Модификатор Состояния = Состояние Оружия * 100 / 85

Таким образом оружие с состоянием не менее 85% не получает штрафов, если же состояние будет ниже, Шанс Попадания начнет снижаться.

Запомним значение этого параметра, оно понадобиться нам позже.

_______________________________________________

Теперь начинается наиболее важная часть формулы - определение базового Шанса Попадания. Основой для расчетов является Меткость стрелка. Для ПТГ расчеты ведутся немного иначе, и мы рассмотрим их позже, а пока формула для стрелкового оружия:

Код:

Эффективная_Меткость = Текущая_Меткость_Стрелка

Если стрелок пьян, то

Эффективная_Меткость = Текущая_Меткость_Стрелка * Уровень_Трезвости / 100

Если Стрелок - Робот, то

Эффективная_Меткость = наивысшему значению - либо Меткости_Робота, либо Меткости_Управляющего_Стрелка

Уровень_Трезвости оказывает свое влияние, в зависимости от того, сколько стрелок выпил.

    Если он трезв, то значение равно 100.

    При стадии опьянения 1 , 75.

    При стадии опьянения 2 , 65.

    При стадии опьянения 3 , 50.

Интересно, что есть еще 4 уровень опьянения (в гавно?), но он вовсе не оказывает влияния на стрельбу!! Значение Трезвости равно 100!! Это делалось для Ивана Долвича???.

Таким образом мы можем потерять от 25% до 50% эффективной меткости находясь в легком или не очень подпитии.

Теперь рассмотрим, что происходит при выстреле из ПТГ.

Код:

Если оружие - ПТГ, то

Эффективная_Меткость = среднему значению от:

1) Текущая_Меткость_Стрелка

2) Текущая_Ловкость_Стрелка

3) Текущая_Мудрость_Стрелка

4) Текущий_Уровень_Стрелка * 10

Каждый из этих параметров модифицируется опьянением. Исключение - первая степень опьянения не влияет на уровень. При следующей стадии, мы теряем 1 уровень, на 2 и 3 - 2 уровня, эти модификации действительны только для данных вычислений. И снова, 4 уровень не дает никаких штрафов :).

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

Далее учитывается эффект умения Тяжелое Вооружение:

Код:

Если оружие - ПТГ, то

Эффективная_Меткость увеличивается на 15 за каждый уровень умения Тяжелое Вооружение.

Итак, теперь мы имеем базовое значение для расчетов "Эффективная_Меткость". Теперь мы рассчитаем "Базовый_Шанс". Позже мы также рассчитаем "Реальный_Шанс", но это позже.

___________________________________________

Первое, что влияет на Базовый_Шанс, это Мораль.

Мораль работает по разному для персонажей и для NPC. Наш персонаж имеет мораль от 0 до 100. 50, это "нормальное" состояние для нашего наемника (в игре зовется "Стабильная"). При 100, наша мораль превосходна, при очень низких значениях ведет к дезертирству. NPC же имеют "стадии", от "Безнадежный" к "Обеспокоенный" потом к "Уверенный", и, наконец, "Бесстрашный".

Для наших персонажей формула следующая:

Код:

Если Мораль_Стрелка > 50, то

Модификатор_Морали = (Мораль_Стрелка - 45) / 100

Иначе

Модификатор_Морали = (Мораль_Стрелка - 50) * 2 / 5

Это означает, что при морали 55, мы получаем +1 Модификатор_Морали, и еще +1 за каждые 10 пунктов выше 55. При морали 95-100, мы получаем максимальный бонус в +5.

Когда наша мораль опускается примерно до 47, мы получаем штраф -1, и еще -1 за каждые 2-3 пункта ниже 47, вплоть до -20.

Для NPCs, каждая "стадия" морали дает постоянный модификатор:

    "Безнадежная" мораль дает -15

    "Обеспокоенная" мораль дает -7

    "Уверенная" мораль дает +2

    "Бесстрашная" мораль дает +5

Теперь с помощью полученных модификаторов, мы изменяем Базовый_Шанс:

Код:

Базовый_Шанс = Базовый_Шанс + Модификатор_Морали

Теперь переходим к расчету влияния Энергии на прицеливание:

Код:

Модификатор_Усталости = Базовый_Шанс * Штраф_Дыхания / 100 / 2

Штраф_Дыхания зависит от текущей Энергии персонажа:

    Для 85 и выше, Штраф_Дыхания = 0

    Для 70-84, Штраф_Дыхания = 10

    Для 50-69, Штраф_Дыхания = 25

    Для 30-49, Штраф_Дыхания = 50

    Для 15-29, Штраф_Дыхания = 75

    ДЛя 14 и ниже, Штраф_Дыхания = 90

Как мы видим, максимальный Модификатор_Усталости не может быть более 45% от Базового_Шанса.

Поскольку это штраф, то мы отнимаем его значение от Базового_Шанса:

Код:

Базовый_Шанс = Базовый_Шанс - Модификатор_Усталости

____________________________________________

После этих расчетов, значение Базового_Шанса сохраняется программой для использования в дальнейших вычислениях. Копия этого значения записывается в параметр "Реальный_Шанс", и формула переходит к дальнейшим вычислениям. Далее эти параметры будут сравниваться, но перед этим Реальный_Шанс испытает массу модификаций.

Код:

Реальный_Шанс = Базовый_Шанс

Сначала программа проверяет, насколько состояние оружия оказывает влияние на Шанс Попадания стрелка. Для этого используется рассчитанный нами выше Модификатор_Состояния

Код:

Если Модификатор_Состояния < Базовый_Шанс, то

Реальный_Шанс = среднее от:

1) Базовый_Шанс

2) Модификатор_Состояния

Это может стать очень сильным ударом по нашему Шансу Попадания. Модификатор_Состояния может значительно уменьшить наши шансы на хорошее попадание, еще до того, как будут проведены все остальные расчеты! Это довольно странно, поскольку выше мы уже учитывали состояние оружия в расчетах, тем не менее это так.

_______________________________________________

Итак, мы полностью переходим к работе с "Реальным_Шансом", оставив "Базовый_Шанс" для более позднего сравнения.

Начинаются расчеты с применения некоторых возможных бонусов:

Код:

Если Местонахождение_Цели тоже что и Местонахождение_Цели предыдущего выстрела, то

Реальный_Шанс увеличивается на 10

Это статичный бонус +10 к Шансу Попадания. Помните, что программа не проверяет, есть ли враг (в том числе враг, в которого вы стреляли) в точке, куда вы стреляли, и бонус будет получен в любом случае!

После этого проверяется бонус ПСИХОВ. Да, именно так, все ПСИХИ имеют бонус, с любым оружием, и в ЛЮБОМ режиме стрельбы:

Код:

Если Стрелок- ПСИХ, то

Реальный_Шанс увеличивается на 15

_____________________________________________

Теперь в формулу добавляется новый тип данных - "Дальность". Программа рассчитывает его сама и записывает значение в МЕТРАХ, не в тайлах. В игровой системе, 10 метров = 1 тайлу.

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

Начнем с положения стрельбы "Стоя":

Спойлер
В общем, если вы стреляете стоя, то вы не получаете штрафа, если только вы не используете снайперскую винтовку с очень сильным прицелом (Помните? бонус +15 или больше дают только сильные прицелы).

Если такой прицел используется, Минимальное Расстояние_Для_Бонуса_Прицелов берется из XML-файла для данного прицела. Если дальность до цели меньше минимальной, то прицел не используется вовсе. Если же дальше - то прицел дает свои бонусы, но стрелок при этом испытывает некоторые сложности при стрельбе стоя. Важно отметить, что в данном случае Дальности рассчитываются в ТАЙЛАХ

Мы можем записать это более понятно:

Код:

Штраф_Прицела = Бонус_Прицела * разницу между Минимальным_Расстоянием_Для_Бонуса_Прицела и реальной Дальностью_До_Цели, в тайлах / 100.

Таким образом за каждый тайл дальности, после которого начинает работать прицел, мы получаем штраф примерно в 1/100 бонуса, который дает сам прицел. Вот пример того, как это работает:

Прицел кратностью 10x (обычный снайперский прицел) имеет минимальную Дальность 70 (это 7 тайлов), и дает бонус в 20. На дальности 8 тайлов произойдет следующее:

Штраф_Прицела = 20 * (8-7) / 100 = 0.2

Конечно это маленький штраф. 0.2 тут же округляется до 0. Но что будет, если дальность до цели 30 тайлов?

Штраф_Прицела = 20 * (30-7) / 100 = 4.6

Вот это уже более значительный штраф. Конечно он все еще мал, но нам же важно понять, как все это работает, к тому же мы еще вернемся к этому позже.

Кроме того, запомните, что штраф, рассчитываемый выше не может быть больше 20.

Далее рассмотрим, что будет при стрельбе сидя:

Спойлер
Проще говоря, бонус за стрельбу сидя равен дальности до цели в тайлах! Чем дальше от нас цель, тем проще попасть в нее сидя! Важно заметить, что это работает только на дальности до 10 тайлов (не может быть больше 10) и в сравнении с стрельбой стоя не является чем-то значительным. Небольшая деталь, которая может позволить нам сэкономить несколько ОД в ближнем бою, не так ли?

Стрельба сидя так же дает нам небольшой штраф за стрельбу с сильными прицелами, фактически - 1/2 от штрафа за стрельбу стоя.

Стрельба лежа - лучшая из 3 возможных:

Спойлер
Так же как в предыдущем случае, но реально эффективная дальность и бонус увеличиваются вдвое - до 20.

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

Давайте используем рассчитанные параметры:

Код:

Реальный_Шанс = Реальный_Шанс + Бонус_Стойки - Штраф_Прицела

_________________________________________________________

Код:

Реальный_Шанс увеличивается на значение Точности оружия

Это должно быть очевидным - Точность для оружия берется из Weapons.XML.

_______________________________________________

Далее мы рассмотрим пистолеты и стрельбу с двух рук:

Спойлер
Сначала идет проверка оружия на принадлежность к пистолетам или SMG. Если она не пройдена, расчеты прерываются.

Если другая рука свободна и мы не держим в ней ничего (НИЧЕГО ВООБЩЕ), и стреляем из пистолета, то мы можем стрелять держа его двумя руками и получить +5 к Шансу Попадания.

Если вторая рука занята и мы пытаемся стрелять из SMG, то мы теряем 5 пунктов Шанса Попадания, так как не можем держать его двумя руками.

Наконец, если мы при этом держим во второй руке оружие, и соответственно стреляем с 2 рук, то при отсутствии умения Обоерукость мы теряем 20 пунктов Шанса Попадания. именно поэтому обоерукие наемники хороши для стрельбы по-македонски!

Слова "попытка стрельбы с двух рук" отражают комплексную проверку. Она включает следующие критерии:

    1) Оба оружия должны быть стрелковым. (не ПТГ, гранаты, etc.)

    2) Оба оружия должны быть одноручными.

    3) Оба оружия не должны стоять в режиме очереди.

    4) Оба оружия должны быть заряженными.

    5) Оба оружия должны быть исправными.

______________________________________________

Здесь стоит рассмотреть еще пару подформул. Эти расчеты называются "Уменьшение_Бонусов" и "Еще_Одно_Уменьшение_Бонусов". Они призваны определить реальные бонусы предмета или атача, в зависимости от их состояния.

Когда используется Уменьшение_Бонусов, то при состоянии 85 и выше мы получим полные боунсы. При снижении меньше 85, бонусы будут стремиться к 0 по следующей формуле:

Код:

Если Состояние_Предмета между 1 и 85, то

Финальный_Бонус = ( ( (Состояние_Предмета * 100) / 85 ) * Изначальный_Бонус ) / 100

Иначе

Финальный_Бонус = Изначальный_Бонус

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

Вторая формула, "Еще_Одно_Уменьшение_Бонусов", несколько иная. Бонус падает в зависимости от состояния предмета, но при этом при состоянии более 50% предметы НЕ ДАЮТ бонусов, а ниже 50% они дают ШТРАФЫ:

Код:

Если Состояние_Предмета между 1 и 99, то

Финальный_Бонус = ( ( ( (Состояние_Предмета * 100) / 100 ) - 50 ) * Изначальный_Бонус ) / 50

Иначе

Финальный_Бонус = Изначальный_Бонус

Если обобщить и упростить, то можно сказать, что при состоянии предмета около 50%, он дает маленькие бонусы. Но если его состояние упало меньше 50%, он начнет давать штрафы.

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

Для простоты введем два новых термина:

"Умеренная проверка" проверка бонуса уменьшает его со 100% to 0%, в зависимости от состояния предметов.

"Жесткая проверка" проверка бонуса уменьшает его пока состояние более 50%, и превращает его в штраф, если состояние падает ниже 50%.

________________________________________________

Теперь мы можем использовать эти формулы в расчетах.

Начнем с рассмотрения штрафов в режимах автоматической стрельбы:

Спойлер
Все просто - штраф при стрельбе с отсечкой начинает начисляться для каждой пули, кроме первой и растет с каждой следующей пулей. Умение Автоматическое оружие уменьшает штраф вдвое, а умение Эксперт Автоматического оружия - еще вдвое (в результате от штрафа может остаться 25%).

Для расчета Штрафа_Отсечки_Оружия, программа делает это:

Спойлер
В результате мы имеем 2 значения - Штраф_Отсечки, и Бонус_Отсечки. В конце они объединяются.

Изначальный штраф за стрельбу с отсечкой берется из Weapons.XML.

Бонусы попадания при стрельбе с отсечкой компенсируют штраф. Вы можете видеть, что бонусы оружия, боеприпасов или аттачей для стрельбы с отсечкой способны уменьшить штраф. В настоящий момент, только Рукоятка (или встроенная рукоятка) может делать это. Помните, что аттачи в плохом состоянии будут увеличивать штраф, а не давать бонус, поскольку они проверяются "Жесткой проверкой".

Наконец, если стрелок лежит, он сможет получить бонусы за сошки.

Штраф_Отсечки и Бонус_Отсечки в результате приводят к 0 или отрицательному значению. Невозможно получить положительное значение Штрафа Отсечки, нынешний алгоритм программы это не позволяет, и это логично.

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

Кроме того, для стрельбы очередями более важным является состояние оружия. Это происходит потому, что все бонусы при стрельбе очередями проверяются "Жесткой проверкой", и при состоянии менее 50% только увеличивают штраф. В результате получаем следующее:

Код:

Реальный_Шанс уменьшается на Штраф_Отсечки, или

Реальный_Шанс уменьшается на Штраф_Очереди...

в зависимости от режима стрельбы

____________________________________________

Теперь переходим к дальнейшим вычислениям, в которых будут участвовать другие параметры, в первую очередь это Дальность.

Мы уже рассматривали "чистое" расстояние до цели, которое отражает расстояние между стрелком и целью.

Теперь мы добавляем еще один параметр - "Эффективная_Дальность". Это значение рассчитывается иначе. Важно, что этот параметр будет использоваться гораздо чаще, чем фактическая дальность.

Если "Эффективная_Дальность" равна 0, то мы увидим "нельзя попасть". Конечно, теоретически, вы все еще имеете некоторые шансы попасть в цель, но это не предмет наших исследований.

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

___________________________________________________

Если мы видим цель, и имеем дополнительные ОД на прицеливание, программа рассчитывает наш бонус прицеливания. Эта часть расчетов может быть трудна для понимания, будьте внимательны.

В оригинальной JA2, каждое очко, потраченное на прицеливание давало прямой бонус +10. В 1.13, отличий не много, но факторов, участвующих в расчете бонуса больше, и в дополнение, мы получили ограничение максимального бонуса прицеливания, который зависит от множества факторов.

Итак перейдем к формуле, которая состоит из 2 частей.

Код:

Шаг 1: Расчет максимального бонуса от дополнительного прицеливания.

---------------------------------------------------------------

Максимальный_Бонус_Прицеливания = 20 + ( (Базовый_Шанс / 20) * Уровень_Стрелка ) + (Точность_Оружия * 2) + 10 за каждый уровень умения Снайпер

Здесь используется Базовый_Шанс, значение, которое мы получали ранее. Если вы помните, он в основном базируется на нашей Меткости, Усталости, Морали, и состоянии оружия. Уровень персонажа в данной формуле не подвергается никаким модификациям. Точность оружия берется из XML-файла.

Максимальный_Бонус_Прицеливания это максимально возможный бонус, который мы получим от дополнительного прицеливания. Даже с 10x кратным снайперским прицелом, если мы достигли максимума - остальные ОД будут потрачены напрасно.

Далее несколько безумных расчетов.

Спойлер
Давайте рассмотрим по строкам.

Строка 1: "Бонус_Прицеливания = ........."

Во-первых, мы рассчитываем бонус прицеливания для пули. Он базируется на максимальном бонусе прицеливания и параметре "Прогресс_Прицеливания" который мы еще не разбирали. Прогресс_Прицеливания это значение, которое растет с каждым дополнительным ОД, потраченным на прицеливание. Для первого и второго потраченного ОД, Прогресс_Прицеливания равен 500, для третьего и четвертого становится 600, 5-6-7 - 750,и для 8 ОД - 1000. Чем больше мы прицеливаемся, тем больше бонус прицеливания.

Строка 2: "Максимальный_Бонус_Прицеливания ................"

Далее мы уменьшаем Максимальный_Бонус_Прицеливания. Таким образом, каждый раз, когда мы тратим дополнительные ОД на прицеливание и начинаем расчеты, мы получаем все более уменьшающиеся результаты. Поскольку Максимальный_Бонус_Прицеливания постоянно уменьшается, персонажи с низкой меткостью почувствуют снижение эффективности прицеливания сильнее, в тоже время, персонажи с высокой Меткостью не заметят значительного увеличения. Несколько иначе дело обстоит, если используется снайперская винтовка с хорошим прицелом, которая позволяет использовать до 8 дополнительных ОД. В этом случае, с учетом того, что их снайперской винтовки обычно ведут огонь на дальние дистанции (и соответственно шанс попадания будет изначально ниже), каждое дополнительно очко прицеливания может оказать значительную помощь для повышения шансов.

Строка 3: "Увеличиваем Реальный_Шанс ....."

Тут мы добавляем полученный бонус к текущему Шансу Попадания, приплюсовывая 0.5, с округлением вниз. Эти 0.5 довольно странная штука. На первый взгляд кажется, что они нужны для компенсации округления вниз, но не проще было бы сделать округление вверх? Да, кстати отрицательные значения бонуса тоже округляются вниз, причем -1,2 станет -2.

После отработки формулы для всех дополнительных ОД, потраченных на прицеливание, мы получим результат в виде модифицированного текущего Шанса Попадания.

Для наглядности приведем пример:

Спойлер
Итак, насколько мы повысили свои шансы? Реальный_Шанс был равен 40, и стал равен 89. 49 очков - практически точно соответствует начальному Максимальному_Бонусу_Прицеливания! Фактически мы использовали свои возможности на 100%. Единственное, что для меня странно - почему в формуле не задействована Ловкость персонажа.

___________________________________________________

Хорошо, мы поговорили о бонусах, теперь о грустном - о штрафах к Шансу Попадания.

Начнем с чего-нибудь простого:

Код:

Если Стрелок - NPC, то

Если Уровень сложности - Легкий, то

Реальный_Шанс уменьшается на 5.

На Легком уровне игры, все персонажи противника имеют штраф равный 5 при стрельбе по вам.

На других уровнях будет иначе:

Код:

Если Стрелок - NPC, то

Если уровень сложности Трудный, то

Реальный_Шанс увеличивается на 5.

Если уровень сложности невозможный, то

Реальный_Шанс увеличивается на 10.

Все понятно, только стоит упомянуть, что на Нормальном уровне сложности модификаторов нет.

Теперь рассмотрим основные штрафы:

Код:

Если Стрелок находится под действием Газа, то

Реальный_Шанс уменьшается на 50!

Солдаты считаются "загазованными", если они находятся в облаке газа без противогаза. Если в начале хода они получают повреждения от газа - то считаются "загазованными" до конца хода

Код:

Если Стрелок перевязан, то

Реальный_Шанс уменьшается на 20!

Получившие рану теряют значительные шансы на попадание в противника.

Код:

Если Стрелок оглушен, то

Реальный_Шанс уменьшается на 5 за каждый уровень оглушения.

Шок проявляется при ранении персонажа. Он растет на 1 за каждые 10 хп, потерянных персонажем, и незначительно увеличивается за счет уменьшения Энергии персонажа от атаки. То есть, если вы потеряли 50 хп, шок будет около 5. Каждый ход шок уменьшается вдвое.

__________________________________________________

Сейчас мы перейдем к расчетам максимальной дальнобойности оружия. Это достаточно простые вычисления, но делаются они отдельно и потому опишем их сейчас. Надеюсь вы читали все внимательно, потому что мы будем говорить о параметре Уменьшение_Бонуса.

Формула:

Спойлер
Дальнобойность оружия - это значение, которое прописано для него в Weapons.XML, она модифицируется собственными бонусами дальности (от встроенных аттачей), боеприпасами (Линейные боеприпасы увеличивают дальность, а Вышибные заряды дробовика - уменьшают), и аттачами. Утконос дает штраф дальности, только, если мы стреляем не Картечью/Дробью. Вы должны помнить, что все эти бонусы проверяются "Умеренно", и соответственно состояние оружия способно свести их к 0, но не превратить в штрафы.

Итак, у нас есть Максимальная_Дальнобойность_Оружия. Разберемся, что происходит, если цель находится дальше.

Важно: Максимальная Дальнобойность ни при каких условиях не может быть меньше 1 - это программное ограничение.

____________________________________________________

Мы переходим к использованию значения "Эффективной_Дальности" которое рассчитывали ранее. Помните, что это значение учитывает не только дальность до цели, но и камуфляж, препятствия и т.п.

Если Эффективная_Дальность равна 0 (например цель не видна), это означает, что мы не можем стрелять в цель. Но код продолжает считать исходя из значения 0, по некоторым не описанным тут причинам . Вместе с тем фактом, Что шанс Попадания не может быть меньше 1%, это означает, что любой выстрел чисто теоретически может попасть в цель.

_______________________________________________

В любом случае, теперь мы перейдем к работе с Реальным_Шансом - и рассмотрим, как к нему применяются модификаторы попадания от оружия, аттачей, и даже освещенности тайла, где находится цель.

Предупреждаю, это еще более запутанно, чем предыдущие примеры с прицеливанием!!!

Во-первых, мы применим к эффективной дальности модификатор прицеливания (чаще всего штраф!) от брони, надетых предметов, или любых аттачей на броне и наголовных предметах.

Формула:

Спойлер
Тут мы проверяем предметы на наличие штрафа прицеливания, и на основании этого уменьшаем наш Бонус Прицеливания

Для примера, давайте используем Шапку Гилли. Она дает штраф к прицеливанию, впрочем большинство одеваемых предметов в 1.13 дают такой штраф.

Давайте считать, что Эффективная_Дальность до цели 100 метров (10 тайлов). Минимальное_Расстояние_Для_Бонуса_Прицеливания равно 0.

Расчеты:

Спойлер
Итак, мы получили штраф в единицу.

Но давайте получим немного удовольствия от теоретизирования. Создадим прицел, который крепится на голове, вернее идет как аттач на шлеме. Пусть он дает бонус 20, как снайперский прицел, и его минимальная дальность для получения бонуса - 50. Используем 6 ОД для прицеливания. Дальность до цели остается прежней (100 метров - 10 тайлов).

Смотрим как бонус будет влиять на каждый ОД :

Спойлер
В результате Финальный_Бонус_Прицеливания, равен 50.

Ну вот как-то так. В результате последние 2 из 6 ОД принесли нам всего 2 пункта бонуса прицеливания - не очень выгодное вложение.

__________________________________________________

Мы рассмотрели все бонусы/штрафы прицеливания от брони, аттачей и т.п.

Код:

Эффективная_Дальность уменьшается на Финальный_Бонус_Прицеливания расчитаный выше.

Естественно, если есть комбинация вещей, дающих штрафы, то эффективная дальность УВЕЛИЧИВАЕТСЯ, что не радует. Наша задача уменьшать Эффективную_Дальность насколько возможно, для точной стрельбы.

______________________________________________________

То что мы делали в предыдущей секции, теперь необходимо сделать для аттачей на оружии. И снова, Минимальная Дальность будет играть свою роль вместе с Модификаторами_Дальности и Финальным_Бонусом_Прицеливания. Если хотите - перечитайте формулу, если хватит терпения, мы же обратим внимание на следующее:

Код:

Эффективная_Дальность уменьшается на Финальные_Бонусы_Прицеливания которые мы получаем от оружия и аттачей. (Жесткая проверка)

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

__________________________________________________

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

Есть большая разница в применении бонусов Прицеливания и Попадания. Прицеливание зависит от количества ОД, потраченного нами. Бонусы попадания не зависят от ОД, но зависят от другого важного фактора - Дальности до цели, и "Эффективной Дальности ЛЦУ". Да, большинство предметов, дающих такие бонусы - это ЛЦУ и все они имеют эффективную дальность использования. Сейчас мы рассмотрим, как дальность влияет на попадание, а так же увидим влияние освещенности цели.

Надеваемые предметы (броня, предметы одеваемые на голову и их аттачи), расчитываются просто. "Эффективная Дальность ЛЦУ" не оказывает на них влияния и поэтому они дают неизменные бонусы или штрафы.

Для каждого одетого предмета выполняется:

Код:

Финальный_Бонус_Попадания = 0

Финальный_Бонус_Попадания увеличивается на значение Бонуса_Попадания предмета, взятое из XML

Для каждого аттача на предмете, выполнить:

Финальный_Бонус_Попадания увеличивается на значение Бонуса_Попадания аттача, взятое из XML

Здесь нам нет необходимости о чем-либо заботиться - о дальности, состоянии предмета и т.д. Все просто и понятно.

Прежде чем продолжить с оружием и его аттачами и рассмотреть Эффективную Дальность ЛЦУ, нам необходимо уточнить нашу Эффективную_Дальность.

Для начала вот это:

Код:

Если персонаж имеет умение Снайпер, то:

Эффективная_Дальность уменьшается на 5% от Реального_Расстояния_До_Цели

Если персонаж Эксперт Снайпер, то:

Уменьшаем Эффективная_Дальность еще на 5% от Реального_Расстояния_До_Цели

Умения Снайпера уменьшает Эффективное_Расстояние_До_Цели, еще до того, как мы начнем учитывать в расчетах эффективную дальность ЛЦУ. Это реально помогает при использовании ЛЦУ

Итак, с новым значением Эффективной_Дальности, мы готовы заняться бонусами Попадания оружия и оружейных аттачей.

______________________________________________

Для расчетов нам необходимы несколько значений:

    Бонус Попадания Предмета: Это то, что мы хотим добавить к нашему Шансу Попадания. Берется из XML.

    Эффективная Дальность ЛЦУ: так же берется из XML.

    Бонус за Сошки: если они есть конечно - тоже из XML.

Проверяем, ведется ли стрельба Лежа?: Проверям условие на Истинность для определения, может ли применяться бонус за сошки. Кроме этого мы должны быть далее чем в 5 тайлах от цели, чтоб получить этот бонус!! Если цель ближе 5 тайлов от Стрелка, программа считает, что он не стрелят лежа, в независимости от реального положения тела

Итак, приступим к расчетам:

Код:

Финальный_Бонус_Попадания = 0

Если Стрелок лежит, то

Финальный_Бонус_Попадания увеличивается на Бонус_За_Сошки оружия, если они в него встроены.

Финальный_Бонус_Попадания увеличивается на Бонус_ЛЦУ если он встроен (Жесткая проверка проверка)

Финальный_Бонус_Попадания увеличивается на Бонус_Попадания_Боеприпасов.

Для каждого аттача выполняется:

Если Стрелок лежит, то

Финальный_Бонус_Попадания увеличивается на Бонус_За_Сошки

Финальный_Бонус_Попадания увеличивается на Бонус_ЛЦУ аттача (Жесткая проверка)

Выглядит просто, но не забывайте, что Бонус_ЛЦУ - это расчитываемое значение, зависящее от множества факторов. Мы сделаем это следующим шагом. Еще раз обратите внимания, что Бонус_ЛЦУ проходит Жесткую проверку, а значит сильно зависит от состояния предмета.

Расчитаем Бонус_ЛЦУ.

Код:

Если у предмета нет параметра Эффективная_Дальность_ЛЦУ, то

Бонус_ЛЦУ = Бонус_Попадания предмета (без изменений). Но помните, что раньше мы модифицировали его в зависимости от состояния!

Здесь мы рассмотрели вещи, которые имеют бонус Попадания, но не являясь ЛЦУ не имею эффективной дальности. Продолжим:

Код:

Если Эффективная_Дальность меньше или равна Эффективной_Дальности_ЛЦУ, то

Бонус_ЛЦУ = Бонусу_Попадания предмета (без изменений!). Но помните, что раньше мы модифицировали его в зависимости от состояния!

То есть, если мы на нужном расстоянии - ЛЦУ работает отлично, если он в хорошем состоянии.

Далее все усложняется.

Код:

Если Эффективная_Дальность больше Эффективной_Дальности_ЛЦУ, то

Максимальная_Дальность_ЛЦУ = Эффективная_Дальность_ЛЦУ * ( (2 * Освещенность_Точки_Стрельбы) + 21 ) / 18

Это жуткое упрощения, потому что на самом деле формула выглядит вот так:

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

Теперь давайте представим, что я вам не рассказал об этом.

Итак, мы имеем максимальную Дальность на которой мы можем видеть точку лазера, основанную на освещенности тайла с целью. Если цель в диапазоне "максимальной" дальности ЛЦУ, мы все еще сможем получать бонусы от ЛЦУ

Помните, что уровень освещенности, это не то, что вы видите, когда нажимаете клавишу "F". Все с точностью наоборот! Днем уровень освещенности обычно равен 3, а ночью - 12. То есть чем выше в программе уровень освещенности, тем темнее, поэтому логичнее было бы назвать это Уровнем Темноты ("DARKNESSLEVEL").

В любом случае, явно видно, что чем темнее, тем дальше будет видно точку лазера (что логично) и тем больше будет его максимальная дальность по сравнению с Эффективной _Дальностью_ЛЦУ. Конечно, если цель находится за пределами эффективной дальности, мы начнем терять бонус, но пока она не оказалась за максимальной дальностью, мы все еще будем получать его часть.

Давайте рассмотрим зависимость Бонуса_ЛЦУ от максимальной и эффективной дальности.

Код:

Бонус_ЛЦУ = ( Бонус_Попадания предмета * ( Максимальная _Дальность_ЛЦУ - Эффективная_Дальность ) ) / ( Максимальная _Дальность_ЛЦУ - Эффективная _Дальность_ЛЦУ предмета)

Каждый тайл вне Эффективной_Дальности_ЛЦУ уменьшает наши бонусы. Темнота помогает нам увеличить Максимальную _Дальность_ЛЦУ. Если цель вне максимальной дальности, то в результате мы получим 0.

Наконец, программа убеждается, что мы не получим Штрафа:

Код:

Если Бонус_ЛЦУ < 0, то

Бонус_ЛЦУ = 0.

Это интересно - Бонус_ЛЦУ проверятся "Жесткой проверкой", а значит при состоянии ЛЦУ < 50%, он начнет давать нам Штраф. Однако, если Бонус_ЛЦУ который мы расчитали равен 0 (фактически мы не используем ЛЦУ, поскольку цель вне радиуса его действия.), мы не получаем штрафа.

Давайте рассмотрим пример для полного понимания:

Спойлер
Таким образом мы определили, что максимальная Дальность для данных условий равна 135. Движемся дальше:

Бонус_ЛЦУ = ( 20 * ( 135 - 120 ) ) / ( 135 - 90 ) = 6.666 (округляем вниз до 6).

Итак, окончательный Бонус_ЛЦУ равен 6. Намного ниже оригинального бонуса ЛЦУ, но неплохо, с учетом, что цель была се эффективной дальности использования.

_______________________________________________

Все бонусы от ЛЦУ расчитываются и добавляются к нашему Реальному_Шансу. Но все же помните, что состояние ЛЦУ < 50% принесет вам Штраф и разочарование.

________________________________________________

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

Код:

Если мы стреляем в голову, то

Штраф_Стрельбы_В_Часть_Тела = 3 * Эффективная_Дальность / 10

Реальный_Шанс уменьшается на Штраф_Стрельбы_В_Часть_Тела

При стрельбе в голову мы теряем 3 очка за каждый тайл до цели.

Код:

Если мы стреляем в ноги, то

Штраф_Стрельбы_В_Часть_Тела = Эффективная_Дальность / 10

Реальный_Шанс уменьшается на Штраф_Стрельбы_В_Часть_Тела

При стрельбе в ноги, мы теряем по 1 пункеу за каждтайл до цели.

_____________________________________________________

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

Код:

Штраф_Дальности = ( (Дальнобойность_Оружия - Расстояние_До_Цели) * 30 ) / 170

Если Штраф_Дальности имеет отрицательное значение, то

Реальный_Шанс уменьшается на Штраф_Дальности

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

Пожалуйста учтите, что это еще не все штрафы за дальность до цели, Далее мы будет продолжать терять Шанс Попадания из-за нее.

Но пока давайте рассмотрим пару примеров:

Используем снайперскую винтовку. Ее дальнобойность равна 75 тайлов (750 метров), а Дальность до цели - 60 тайлов (600 метров)

Штраф_Дальности = ( (750 - 600) * 30 ) / 170 = 26.4

Штраф_Дальности Имеет положительное значение - штрафа нет.[/b]

Во втором примере мы стреляем из пистолета с дальнобойностью в 11 тайлов (110 метров) в цель в 13 тайлах (130 метров)

Штраф_Дальности = ( (110 - 130) * 30 ) / 170 = -3.5[/b]

Мы потеряли из-за дальности 3,5 пункта Шанса Попадания, и будет терять еще больше далее.

___________________________________________

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

Код:

Если Стрелок это Танк, и Расстояние_До_Цели в тайлах меньше чем (2 * стандартного радиуса обзора в тайлах), то

Штаф_Короткой_Дистанции_Танка = 2 * ( (2 * Обычный_Радиус_Обзора в тайлах) - Расстояние_До_Цели в тайлах )

Реальный_Шанс уменьшается на Штаф_Короткой_Дистанции_Танка

Нормальный радиус обзора величина не фиксированная и устанавливается в JA2_Options.INI. По умолчанию равна 13. Таким образом Танк будет получать штрафы, если цель ближе 26 тайлов

_____________________________________________________

Код:

Если Эффективная_Дальность = 0, то

Реальный_Шанс уменьшается на 80!!!

Это понятно. Эффективная дальность равна 0 только, если мы не видим цель, или если мы используем очень поврежденный прицел. Это означает, что мы пытаемся стрелять в слепую, что катастрофически уменьшает наши шансы на попадание.

_____________________________________________________

Далее рассмотрим кое-что интересное.

Код:

Универсальный_Модификатор_Дальности = 3 * (Нормальная_Дальность - Эффективная_Дальность) / 10

Реальный_Шанс увеличивается/уменьшается на Универсальный_Модификатор_Дальности

Это универсальный модификатор. Он дает 3 пункта бонуса или штрафа, в зависимости от Нормальной_Дальности. Но что такое "Нормальная Дальность"? Этьо фиксированное значение, установленное программистами равным 90 метрам (9 тайлов). Это означает, что мы получаем 3 очка бонуса за каждый тайл ближе нормальной дальности и 3 очка штрафа - за каждый тайл дальше этой дальности. Изменяя параметр Нормальной Дальности, можно серьезно изменить геймплей - упрощая попадание при его увеличении, и значительно усложняя стрельбу - при уменьшении.

__________________________________________________

Далее программа проверяет, не находятся ли стрелок и цель на разных уровнях карты (крыша).

Код:

Если Стрелок на крыше, а Цель на земле, то

Реальный_Шанс увеличивается на 15

Если Стрелок на земле, а Цель на крыше, то

Реальный_Шанс уменьшается на 25

Все очевидно - стрелять с крыши проще, и наоборот.

_________________________________________________

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

Формула:

Спойлер
Конкретный штраф при стрельбе лежа в стоящего противника на расстоянии до 5 тайлов.

Целевая_Часть_Тела это числовое значение, где 1 = Голова, 2 = Торс, и 3 = Ноги. Расстояние_До_Цели всегда до 5 тайлов.

Пример:

Для Дальность 2, при стрельбе в Голову (1):

Штраф_Стрельбы_В_Часть_Тела = (5 - 1 - 2) * 10 = 20[/b]

Для Дальность 3, при стрельбе в Торс (2):

Штраф_Стрельбы_В_Часть_Тела = (5 - 2 - 3) * 10 = 0[/b]

И мы даже получим бонус, если будем стрелять в ноги.

Для Дальность 4, при стрельбе в Ноги (3):

Штраф_Стрельбы_В_Часть_Тела = (5 - 3 - 4) * 10 = -20[/b]

То есть мы получим бонус в 20!

Помните, что если вы не выбираете какую-то часть тела, для данной формулы попадание считается в Торс.

_______________________________________________________

Цель сидит, стреляет Танк:

Спойлер
Идея должна быть ясна.

Во-первых, Танк начинает получать штраф при стрельбе в сидящую цель на расстоянии меньше 12 тайлов.

Если стрелок не танк - эта часть формулы пропускается.Вторая часть формулы привела меня в ступор, возможно я так и нес мог понять правильных значений.

В любом случае, суть в том, что после дальности до цели в 16 тайлов (160 метров) танк начинает терять по 3 пункта в Шансе Попадания за каждый тайл, а при достижении определенного значения теряет сразу 20.

Цель Лежит:

Спойлер
Тоже самое, что и для предыдущего случая с небольшой разницей.

Штрафы танка при стрельбе по лежащей цели увеличиваются вдвое, до максимума в 40!

_________________________________________________

Далее Шанс Попадания модифицируется за счет движения цели:

Код:

Штраф_За_Движение_Цели = количество пройденых тайлов * 1.5

Если Штраф_За_Движение_Цели > 30, то

Штраф_За_Движение_Цели = 30

Реальный_Шанс уменьшается на Штраф_За_Движение_Цели

Стрелок получает Штраф в 1,5 пункта за каждый пройденый целью тайл. Количество пройденых тайлов обнуляется в начале хода цели.

_______________________________________________________

Далее речь пойдет об уворачивании от пуль. Да, вы это умеете:). Уворот в основном зависит от Проворности цели, а компенсируетя его действие Ловкостью Стрелка.

Формула:

Спойлер
Эта формула отражает способность цели к увороту, а также способность стрелка нейтрализовывать ее потуги. Исключениями тут являются Танк - который не способен уворачиваться и Королева Жуков, от которой напротив очень трудно увернуться.

Штраф_Уворота основывается на Проворности и Уровне Цели. Что может влиять на Эффективный уровень цели мы рассматривали выше.

Если цель сидит или лежит - ее способность у увороту падает.

Ловкость и эффективный уровень стрелка опредеяют значение Компенсации Уворота.

Проверка на Танк и Королеву Жуков в расчете компенсации довольно кривая. Возможно в будущем кто-то решится и перепишет ее!!!

В любом случае, в конце значения сравниваются и стрелок либо получает штраф, либо остается при своих, в зависимости от прокачки крутости цели и себя самого!

___________________________________________________

Далее идет проверка, определяющая штраф для танка при стрельбе по площади.

Код:

Если Целевой_Тайл пуст, и Расстояние_До_Целелого_Тайла меньше 120 метров (12 тайлов), то

Штраф_Танка= 25 * ( 120 - Расстояние_До_Целевого_Тайла ) / 10

Она не дублирует прошлую формулу, которая применяется только если танк целится в кого-то конкретно.

___________________________________________________

Мы уже использовали в расчетах факторы ранения и усталости, но сейчас мы снова вернемся к ним, чтобы снова получит штрафы к своему Шансу Попадания.

Формула:

Спойлер
Это весьма запутанно. По сути мы получаем штраф к Шансу попадания в зависимости от количества хп, потеряных от нашего максимума, причем перевязанные раны уменьшают влияние вдвое. В конце формулы учитывается опыт наемника, то есть прокачанные бойцы меньше подвержены воздействию полученных ран.

__________________________________________________

Сейчас мы рассмотрим основные штрафы, убивающие наши шансы на попадание.

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

Код:

Если Расстояние_До_Цели больше чем Дальнобойность_Оружия, то

Реальный_Шанс уменьшается вдвое!

Все просто. Даже один лишний тайл до цели, по сравнению с дальнобойностью оружия сразу уменьшает наши шансы вдвое.

Следующий штраф:

Код:

Если цель вне радиуса видимости Стрелка, то

Реальный_Шанс уменьшается вдвое!

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

Хотите верьте, хотите нет, но мы подошли к финалу. Осталось рассмотреть всего несколько мелких замечаний:

Код:

Если Реальный_Шанс < 1, то

Реальный_Шанс = 1.

+End.

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

Последние строки кода означают, что Шанс Попадания НИКОГДА не может быть меньше 1%. Раньше это приводило к тому, что желтопузый админ из самого слабого пистолета мог засадить в вас пулю через всю карту, что не могло не раздражать. Слава богу, что в 1.13, это было поправлено и теперь вы можете выставить в INI файле как 0 минимальный шанс, так и просто уменьшить вероятность таких попаданий с 1/100 до 1/1000 и более

------------------------------------------------

Значение параметра Реальный_Шанс и будет нашим Шансом Попадания для конкретного выстрела.

В качестве обобщения материала:

Список вещей и действий, улучшающих/ухудшающих Шанс Попадания:

Спойлер

129
Еще в блоге
Интересное на Gamer.ru

5 комментариев к «Как это работает. Шанс Попадания в цель.»

    Загружается
Чат