A.I.M.(http://forum.ja2.su/cgi-bin/yabb/YaBB.pl)
Обсуждаем игры >> Все об Альянсе >> Расчёт вероятности попадания.
(Message started by: bugmonster на 11.04.2006 в 09:55:58)

Заголовок: Расчёт вероятности попадания.
Прислано пользователем bugmonster на 11.04.2006 в 09:55:58
В качестве справочных данных и любопытной информации привожу расчёт вероятности попадания в JA2 в переводе с С на человеческий язык.
Данная тема создана не для обсуждения чего-либо, поэтому желательно задавать здесь вопросы касающиеся только непонятных моментов в формуле.

ШАНСп - шанс попадания, %, вычисляется как:

ШАНСп = МЕТКср + Бразн - ШТразн + ВЛдальн, где

       МЕТКср - меткость средняя, вычисляется как
           если СТор >= МЕТКср , то
                 МЕТКср = МЕТКстрл
           иначе
                 МЕТКср = (МЕТКстрл+СТор)/2 , где
                       МЕТКстрл - меткость стрелка, определяется как:
                             если стрельба из гранатомёта, то
                                   МЕТКстрл = ( ЛОВэфф + МЕТКэфф + МУДРэфф + 10*УРВэфф )/2 + 15*Нтв + Бмор - Шуст, где
                                                       ЛОВэфф - эффективная ловкость, определяется из ловкости и количества алкоголя.
                                                       МЕТКэфф - эффективная меткость, определяется из меткости и количества алкоголя.
                                                       МУДРэфф - эффективная мудрость, определяется из мудрости и количества алкоголя.
                                                       УРВэфф - эффективный уровень опыта, уменьшается на 1-2 от алкоголя, уменьшается на 1 у клаустрофобов  под землёй.
                                                       Нтв - навык "Тяжелое вооружение", равен 1, для эксперта равен 2.
                                                       Бмор - бонус морали.
                                                       Шуст - штраф за усталость.
                                       иначе
                                   МЕТКстрл = МЕТКэфф + Бмор - Шуст, где
                                         МЕТКэфф - эффективная меткость, определяется из меткости и количества алкоголя, если стрелок робот то берётся максимум из меткости робота и эффективной меткости управляющего им.
                                         Бмор - бонус морали.
                                         Шуст - штраф за усталость.
                       СТор - статус оружия, определяется как:
                             если СОСТпред >= 85, то
                                   СТор = 100
                             иначе
                                   СТор = СОСТпред*100/85, где
                                         СОСТпред - состояние оружия, берётся из состояния предмета

     Бразн - разные бонусы, вычмсляется как:
           Бразн = Бпв + Бсих + Бсид + Блеж + Бприц + Блцу + Бвниз
           Бпв - бонус для повторного выстрела, равен 0 или 10
           Бсих - бонус психопата, равен 0 или 15
           Бсид - бонус сидельца, по единице за 1 тайл расстояния до цели, но не более 10 очков.
           Блеж - бонус лежальца, определяется как:
                 Блеж = Бдальн*(1+Ксошек), где
                       Бдальн - бонус дальности, по единице за 1 тайл расстояния до цели, но не ближе 5 тайлов, и не более 20 очков
                       Ксошек - коэффициент сошек, если их нет то =0, если есть, определяется как:
                             Ксошек = СТсошек / 200, где
                                   СТсошек, состояние сошек, определяется по аналогии с СТор
           Бприц - бонус прицеливания, по 10 за каждое АР на прицеливание
           Блцу - бонус за лазерный прицел, определяется как:
                 Блцу = 20*(СТлцу-50)/50, где
                       СТлцу, состояние лазерного прицела, определяется по аналогии с СТор, если это лцу ракетной винтовки, то берётся её состояние
               Бвниз - бонус при стрельбе с крыши по земле, вычисляется как
                       Бвниз = 15*(1+Нск), где
                               Нск - навык "стрельба с крыши", равен 1, для эксперта равен 2.

     ШТразн - штрафы разные, определяется как:
           ШТразн = ШТпп2 + ШТор2 + ШТочер + ШТврагам + ШТгаз + ШТмед + ШТшок + ШТотвал + ШТгол + ШТног + ШТдальн + ШТтанка + ШТслеп + ШТвверх + ШТцсид + ШТцлеж + ШТцст + ШТцдвиг + ШТуверт + ШТтанк, где
                 ШТпп2 - штраф стрельбы из двух пистолет-пулемётов, равен 5
                 ШТор2 - штраф срельбы с двух рук, если нет навыка AMBIDEXTROUS равен 20
                 ШТочер - штраф для пули в очереди, вычисляется как:
                       ШТочер = Шразброс*(Nпули-1)/(2*Нао), где
                             Шразброс - штраф за разброс пули в очереди, берется из параметров оружия
                             Nпули - номер данной пули в очереди
                             Нао - навык "автоматическое оружие", если есть равен 1, для эксперта ревен 2
                 ШТврагам - штраф врагам если уровнь сложности "легкий".
                 ШТгаз - штраф, если стрелок нюхнул газку, равен 50
                 ШТмед - штраф, если стрелка перевязывают, равен 20
                 ШТшок - штраф, если стрелок шокирован, по 5 за единицу шока
                 ШТотвал - штраф за отвалившийся удлиннитель ствола, равен 30
                 ШТгол - штраф при зацеливании в голову, вычисляется как:
                       ШТгол = 3*Lприц/10, где
                                       Lприц - дальность прицеливания, в тайлах/10
                 ШТног - штраф при зацеливании в ноги, вычисляется как:
                       ШТног = Lприц/10, где
                                       Lприц - дальность прицеливания, в тайлах/10
                       ШТдальн - штраф за выход за пределы дальности, если получается отрицательным, то не используется, вычисляется как:
                               ШТдальн = (Lор-Lрасст*3)/17, где
                                       Lор - дальность оружия, в тайлах/10
                                       Lрасст - расстояние до цели, в тайлах/10
                 ШТтанка - штраф для танка, если цель находится ближе 26 тайлов:
                               ШТтанка = 2*(26-Lрасст/10), где
                                       Lрасст - расстояние до цели, в тайлах/10                                
                       ШТслеп - штраф за слепоту, равен 80
                       ШТвверх - штраф при стрельбе с земли по крыше, равен 25
                       ШТцсид - штраф при стрельбе по сидячему, вычисляется как:
                               если целит танк по сидячему, и расстояние меньше 12 тайлов
                                       ШТцсид = 13*(120-Lрасст)/10;
                                             Lрасст - расстояние до цели, в тайлах/10                                        
                               иначе если Lрасст > 16+200/3:
                                       ШТцсид = 20
                               иначе если Lрасст > 16
                                       ШТцсид = 3*(Lрасст-16)/10;                                              
                       ШТцлеж - штраф при стрельбе по лежачему, вычисляется как:
                               если целит танк по сидячему, и расстояние меньше 12 тайлов
                                       ШТцлеж = 25*(120-Lрасст)/10;
                               иначе если Lрасст > 16
                                       ШТцлеж = 3 * (Lрасст-16)/10, но не больше 40.
                       ШТцст - штраф если лежа стрелять в стоящего не дальше чем в 5 тайлах фрага
                               ШТцст = (5-ЧАСТЬ-Lрасст/10)*10, где
                                       ЧАСТЬ - часть цели, голова=1, туловище=2, ноги=3, у жуков и кошек всё=2
                       ШТцдвиг - штраф стрельбы по двигавшейся цели, вычисляется как:
                               ШТцдвиг = ПРОБЕГ*3/2, но не более 30, где
                                       ПРОБЕГ - пробег цели, в тайлах
                       ШТуверт - штраф увертывания, срабатывает если цель не танк, не жукоматка и видит нас, вычисляется как:
                               ШТуверт = (ПОДВэффц/5+УРВэффц*2)*Kмоб-(ЛОВэфф/5+УРВэфф*2), если меньше ноля - игнорируется, где
                                       ПОДВэффц - эффективная подвижность цели, определяется из подвижности, уменьшается алкоголем и перегрузкой инвентаря.
                                       УРВэффц - эффективный уровень опыта, уменьшается на 1-2 от алкоголя, уменьшается на 1 у клаустрофобов  под землёй.

                                       Kмоб - коэффициент мобильности, для стоячего =1, для сидячего =2/3, для лежачего =1/3
                                       ЛОВэфф - эффективная ловкость, определяется из ловкости и количества алкоголя.
                                       УРВэфф - эффективный уровень опыта, уменьшается на 1-2 от алкоголя, уменьшается на 1 у клаустрофобов  под землёй.

                       ШТтанк - штраф, если танк стреляет ближе 12 тайлов, вычисляется как:
                               ШТтанк = 25*(120-Lрасст)/10, где
                                       Lрасст - расстояние до цели, в тайлах/10

       ВЛдальн - влияние дальности, вычисляется как:
               ВЛдальн = 3*(90-Lприц)/10, где
                  Lприц, дальность прицеливания, расчёт см. ниже
-----------------------------------------------------------------------------------------------------------        
Если стреляющий ранен, рассчитанный шанс изменяется так:
ШАНСп = ШАНСп - ШАНСп*Кран, где
       Кран - коэф-т штрафа за ранения, рассчитывается как:
               Кран = 2*(Жмакс-Жтек+(Жмакс-Жтек-Жкров)/2))*(100-10*(УРВэфф-1))/(300*Жмакс), где
                       Жмакс - макимальная жизнь (полная)
                       Жтек - текущий уровень жизни
                       Жкров - "кровоточащий" уровень жизни
-----------------------------------------------------------------------------------------------------------        
Если стреляющий задыхается, рассчитанный шанс изменяется так:
ШАНСп = ШАНСп - ШАНСп*Кдых, где
       Кдых - коэф-т штрафа за одышку, рассчитывается как:
           Кдых = (100-ДЫХ)*(110-ЛОВэфф)/20000;
-----------------------------------------------------------------------------------------------------------        
Полученный шанс уменьшается
ШАНСп = ШАНСп*Kдальн*Kвид, где
       Kдальн - коэффициент выхода за пределы дальности оружия, если Lрасст>Lор то = 0,5, иначе 1
       Kвид - коэффициент выхода за пределы дальности видимости, если Lприц>Lвид то = 0,5, иначе 1
-----------------------------------------------------------------------------------------------------------        
Полученный шанс ограничивается минимум 1% (для танка - 0%) и максимумом 99%
-----------------------------------------------------------------------------------------------------------

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

Lприц, дальность прицеливания, тайл/10, вычисляется как:
     Lприц = Lрасст + Lневид - Lочки - Lопт, где
           Lрасст - расстояние до цели, тайл/10
           Lневид - увеличение дистанции за пределами зрения, если Lприц < Lвид, то Lневид = 0, иначе вычисляется как:
                 Lневид = (Lрасст - Lвид)
           Lочки - приближение из-за солнечных очков, если они есть, то вычисляется как:
                 Lочки = Lрасст/10
           Lопт - приближение из-за оптического прицела, если он есть, то вычисляется как:
                 Lопт =       ( 20*APприц*(Lрасст-60)*СТопт )/10000, где
                       APприц - АР на прицеливание
                       СТопт - состояние оптики, вычисляется как:
                             СТопт = СОСТпред*100/85, где
                                         СОСТпред - состояние прицела, берётся из состояния предмета

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем Docent на 11.04.2006 в 10:05:40
2bugmonster: То, что выложил
Quote:
расчёт вероятности попадания в JA2 в переводе с С на человеческий язык.

это очень хорошо ;)!  Надо внимательно почитать и осмыслить :).
А можно еще выложить формулы расчета повышения уровня меткости, плиз!
Последнее время как-то заинтересовался этим вопросом, а исходники никогда не ковырял :(.

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем bugmonster на 11.04.2006 в 10:24:01
2Docent:

Quote:
формулы расчета повышения уровня меткости

Прокачки меткости?

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем Docent на 11.04.2006 в 10:35:57
2bugmonster:
Да, какие условия учитываются при повышении уровня меткости, что на это влияет ;). Сколько надо сделать выстрелов, убить (ранить) фрагов, сколько боев провести, чтобы получить еще единичку прибавки :)!

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем bugmonster на 11.04.2006 в 11:27:48
2Docent:
Там уже не формула, а скорее алгоритм. Ладно, накопаю - выложу.

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем Docent на 11.04.2006 в 11:45:07
2bugmonster:
Quote:
Там уже не формула, а скорее алгоритм. Ладно, накопаю - выложу.

Скорее всего - алгоритм. Буду очень благодарен ;)!

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем Pyromancer на 11.04.2006 в 14:21:58
2Docent:
это я в гробокопателях  уже писал :P
http://forum.ja2.ru/cgi-bin/yabb/YaBB.pl?board=gravediggers;action=display;num=1102772626;start=30#30

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем Docent на 11.04.2006 в 14:37:13
2Pyromancer:Большое спасибо за информацию, буду изучать ;)!

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем Ushwood на 11.04.2006 в 15:12:01
2bugmonster: спасибо за выкладки :)
Есть вопрос:

Quote:
МУДРэфф - эффективная мудрость, определяется из мудрости и количества алкоголя.
          УРВэфф - эффективная мудрость, определяется из мудрости, количества алкоголя, уменьшается на 1 у клаустрофобов  под землёй.
Что-то мне подсказывает, что УРВэфф - это никакая не эффективная мудрость, а эффективный уровень... и в остальных местах, где упоминается - тоже.

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем bugmonster на 11.04.2006 в 16:01:30
2Ushwood: Спасибо, поправил.

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем MAn на 24.04.2006 в 16:11:38
2bugmonster:

Quote:
Lприц = Lрасст*2 + Lневид - Lочки - Lопт, где


А это не описка случайно, что Lрасст умножается на два?

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем bugmonster на 25.04.2006 в 09:32:49
2MAn: Как есть :idontnow:. Оно всё равно используется не в прямом виде, а с коэффициентами, поэтому Lприц можно трактовать не как дальность прицеливания, а как удвоенную дальность прицеливания. Т.е. умножив расстояние до цели на два, они уменьшили влияние других величин на Lприц.

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем Artem13 на 25.04.2006 в 09:49:43
Сергей, либо я дурак, дибо сиры - получается, что при износе ствола больше 85% эфф. меткость возрастает ???

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем bugmonster на 25.04.2006 в 12:00:40
2Artem13: Нет - я!  ;D
Опечатка. Формулу:

    СТор - статус оружия, определяется как:
    если СОСТпред >= 85, то
     СТор = СОСТпред
    иначе
     СТор = СОСТпред*100/85, где
      СОСТпред - состояние оружия, берётся из состояния предмета


Следует читать

    СТор - статус оружия, определяется как:
    если СОСТпред >= 85, то
     СТор = 100
    иначе
     СТор = СОСТпред*100/85, где
      СОСТпред - состояние оружия, берётся из состояния предмета


Щас поправлю :shuffle:

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем bugmonster на 25.04.2006 в 12:08:09
2Artem13:
Другими словами, эта формула означает, что состояние оружия лучше или равное 85% считается чисто косметическим износом и оружие сохраняет 100% работоспособность.
По части состояния от 0 до 85 равномерно растянут диапазон состояния оружия. Т.е. предмет-оружие изношенный на 50% считается изношенным на 59%.

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем MAn на 25.04.2006 в 20:48:31

Quote:
Блеж - бонус лежальца, определяется как:
  Блеж = Бдальн*(1+Ксошек), где
   Бдальн - бонус дальности, по единице за 1 тайл расстояния до цели, но не ближе 5 тайлов, и не более 20 очков
   Ксошек - коэффициент сошек, если их нет то =0, если есть, определяется как:
    Ксошек = СТсошек / 2, где
     СТсошек, состояние сошек, определяется по аналогии с СТор


Наверное СТсошек/100 :confused:

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем bugmonster на 26.04.2006 в 13:40:14
2MAn:
Мдяя. Это я неправильно выразил, поправлю.
На самом деле там будет:
Ксошек = СТсошек / 200
Т.е.  (1+(СТсошек/100)/2) означает, что сошки могут увеличить бонус за стрельбу лёжа в 1,5 раза.

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем RadicalRex на 16.08.2011 в 22:34:58

on 1144738558, bugmonster wrote:
ШТдальн - штраф за выход за пределы дальности, если получается отрицательным, то не используется, вычисляется как:
ШТдальн = (Lор-Lрасст*3)/17, где
Lор - дальность оружия, в тайлах/10
Lрасст - расстояние до цели, в тайлах/10

Раз автор до сих пор на форуме

Может тогда так:
ШТдальн = (Lрасст*3-Lор)/17
?

Добавлено. Глянул исходники.
Первое: штраф рассчитывается не при выходе за пределы дальности, а во всех случаях.
Второе: если получается положительным, то не используется.
Третье: отрицательное значение штрафа прибавляется к шансу на попадание (минус на плюс даёт минус -> шанс на попадание снижается).

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем RadicalRex на 03.08.2012 в 10:38:28

Code:
     if ( Item[ usHandItem ].usItemClass != IC_LAUNCHER && pSoldier->bWeaponMode != WM_ATTACHED )
     {
           // PHYSICALLY THROWN arced projectile (ie. grenade)
           // for lack of anything better, base throwing accuracy on dex & marskmanship
           iChance = ( EffectiveDexterity( pSoldier ) + EffectiveMarksmanship( pSoldier ) ) / 2;
           // throwing trait helps out
           if ( HAS_SKILL_TRAIT( pSoldier, THROWING ) )
           {
                 iChance += gbSkillTraitBonus[THROWING] * NUM_SKILL_TRAITS( pSoldier, THROWING );
           }
     }
     else
     {
           // MECHANICALLY FIRED arced projectile (ie. mortar), need brains & know-how
           iChance = ( EffectiveDexterity( pSoldier ) + EffectiveMarksmanship( pSoldier ) + EffectiveWisdom( pSoldier ) + pSoldier->bExpLevel ) / 4;

           // heavy weapons trait helps out
           if (HAS_SKILL_TRAIT( pSoldier, HEAVY_WEAPS ))
           {
                 iChance += gbSkillTraitBonus[HEAVY_WEAPS] * NUM_SKILL_TRAITS( pSoldier, HEAVY_WEAPS );
           }
     }

Кто-нибудь может объяснить, какое условие проверяется в первой строчке?

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем jz на 03.08.2012 в 13:56:31

on 1343979508, RadicalRex wrote:
какое условие проверяется в первой строчке?


Code:
Item[ usHandItem ].usItemClass != IC_LAUNCHER]
в правой руке не гранатомет/миномет

И


Code:
pSoldier->bWeaponMode != WM_ATTACHED
режим стрельбы из оружия НЕ подствольник

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем RadicalRex на 03.08.2012 в 16:16:34
Спасибо. Тогда получается что за обычные гранаты отвечает ловкость и меткость плюс навык "броски", а за стрельбу из 40-мм гранатомёта, подствольника  и миномёта - ловкость, меткость, интеллект и опыт плюс навык "тяжёлое оружие".

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем RadicalRex на 11.08.2012 в 04:48:50

on 1144738558, bugmonster wrote:
ШТуверт = (ЛОВэффц/5+УРВэффц*2)*Kмоб-(ЛОВэфф/5+УРВэфф*2), если меньше ноля - игнорируется, где           
ЛОВэффц - эффективная ловкость цели, определяется из ловкости и количества алкоголя.        УРВэффц - эффективный уровень опыта, уменьшается на 1-2 от алкоголя, уменьшается на 1 у клаустрофобов под землёй.

Там не ловкость цели, а проворность цели (подвижность, agility).

Code:
           // if target sees us, he may have a chance to dodge before the gun goes off
           // but ability to dodge is reduced if crouched or prone!
           if (pTarget->bOppList[pSoldier->ubID] == SEEN_CURRENTLY && !TANK( pTarget ) && !(pSoldier->ubBodyType != QUEENMONSTER) )
           {
                 iPenalty = ( EffectiveAgility( pTarget ) / 5 + EffectiveExpLevel( pTarget ) * 2);
                 switch( gAnimControl[ pTarget->usAnimState ].ubHeight )
                 {
                       case ANIM_CROUCH:
                             iPenalty = iPenalty * 2 / 3;
                             break;
                       case ANIM_PRONE:
                             iPenalty /= 3;
                             break;
                 }                                                
  // reduce dodge ability by the attacker's stats
                 iBonus = ( EffectiveDexterity( pSoldier ) / 5 + EffectiveExpLevel( pSoldier ) * 2);
                 if ( TANK( pTarget ) || (pSoldier->ubBodyType != QUEENMONSTER) )
                 {
                       // reduce ability to track shots
                       iBonus = iBonus / 2;
                 }

                 if ( iPenalty > iBonus )
                 {
                       iChance -= (iPenalty - iBonus);
                 }
           }
     }
     else if ( TANK( pSoldier ) && iRange < MIN_TANK_RANGE )
     {
           // 25% penalty per tile closer than min range
           iChance -= 25 * ( ( MIN_TANK_RANGE - iRange ) / CELL_X_SIZE );
     }

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем bugmonster на 11.08.2012 в 06:52:27

Quote:
Там не ловкость цели, а проворность цели (подвижность, agility).



Code:
EffectiveDexterity( pSoldier ) / 5


?

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем RadicalRex на 11.08.2012 в 07:00:13
2bugmonster:

Code:
iPenalty = ( EffectiveAgility( pTarget ) / 5 +

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем bugmonster на 13.08.2012 в 18:39:20
2RadicalRex: Поправил, спасибо.

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем RadicalRex на 09.12.2012 в 06:47:30

on 1355020323, bugmonster wrote:
Посмотрел ещё раз код, установил следующее:    - стрельба дальше 52 клеток считается, как и стрельба за препятствие, стрельбой вслепую, поэтому все бонусы от прицеливания отпадают и  -80% к шансу попадания  - при стрельбе дальше 13 клеток цель оптически отодвигается ещё дальше  - основное: оптическое расстояние до цели налагает штраф на шанс попадания при стрельбе дальше 9 клеток в 3% за клетку (согласно комментариям в коде это появилось в JA2.5, судя по закомментированному коду в оригинале штраф составлял 2% за клетку).   То есть уже на довольно близком расстоянии этот штраф будет равен -100%.    Я даже не могу посчитать это расстояние, учитывая внезапное удвоение оптического расстояния до цели  iSightRange *= 2; без его ополовинивания позже, и последующее растягивание. Натурально брейнфак

Ещё раз приведу кусок исходного кода с комментариями разработчиков. Начало расчёта оптического расстояния iSightRange:

Code:
sDistVis = DistanceVisible( pSoldier, DIRECTION_IRRELEVANT, DIRECTION_IRRELEVANT, sGridNo, 0 );

     // give some leeway to allow people to spot for each other...
     // use distance limitation for LOS routine of 2 x maximum distance EVER visible, so that we get accurate
     // calculations out to around 50 tiles.  Because we multiply max distance by 2, we must divide by 2 later

     // CJC August 13 2002:  Wow, this has been wrong the whole time.  bTargetCubeLevel seems to be generally set to 2 -
     // but if a character is shooting at an enemy in a particular spot, then we should be using the target position on the body.

     // CJC August 13, 2002
     // If the start soldier has a body part they are aiming at, and know about the person in the tile, then use that height instead
     iSightRange = -1;

     ubTargetID = WhoIsThere2( sGridNo, pSoldier->bTargetLevel );
     // best to use team knowledge as well, in case of spotting for someone else
     if (ubTargetID != NOBODY && pSoldier->bOppList[ubTargetID] == SEEN_CURRENTLY || gbPublicOpplist[pSoldier->bTeam][ubTargetID] == SEEN_CURRENTLY)
     {
           iSightRange = SoldierToBodyPartLineOfSightTest( pSoldier, sGridNo, pSoldier->bTargetLevel, pSoldier->bAimShotLocation, (UINT8) (MaxDistanceVisible() * 2), TRUE );      
     }
     
     if (iSightRange == -1) // didn't do a bodypart-based test
     {
           iSightRange = SoldierTo3DLocationLineOfSightTest( pSoldier, sGridNo, pSoldier->bTargetLevel, pSoldier->bTargetCubeLevel, (UINT8) (MaxDistanceVisible() * 2), TRUE );
     }
     
     iSightRange *= 2;


Собственно первая строка:
sDistVis = DistanceVisible( pSoldier, DIRECTION_IRRELEVANT, DIRECTION_IRRELEVANT, sGridNo, 0 );
Какое максимальное значение эта переменная может иметь: 25-29 клеток (250-290 метров) или 50-58?

Ещё одна строка:
iSightRange = SoldierToBodyPartLineOfSightTest( pSoldier, sGridNo, pSoldier->bTargetLevel, pSoldier->bAimShotLocation, (UINT8) (MaxDistanceVisible() * 2), TRUE );
Как умножение MaxDistanceVisible() на 2 влияет на iSightRange?

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем bugmonster на 09.12.2012 в 08:12:04

on 1355024850, RadicalRex wrote:
Собственно первая строка:
sDistVis = DistanceVisible( pSoldier, DIRECTION_IRRELEVANT, DIRECTION_IRRELEVANT, sGridNo, 0 );
Какое максимальное значение эта переменная может иметь: 25-29 клеток (250-290 метров) или 50-58?  

Первое.

on 1355024850, RadicalRex wrote:
iSightRange = SoldierToBodyPartLineOfSightTest( pSoldier, sGridNo, pSoldier->bTargetLevel, pSoldier->bAimShotLocation, (UINT8) (MaxDistanceVisible() * 2), TRUE );
Как умножение MaxDistanceVisible() на 2 влияет на iSightRange?

Я уже писал как. Цель дальше 26*2 клеток невозможно увидеть.

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем RadicalRex на 09.12.2012 в 08:25:40
Но если sDistVis=25, а iSightRange, увеличиваемая в одной из строк в два раза, равна 50, то исходя из одной из последних строк в кода:

Code:
if ( iSightRange > (sDistVis * CELL_X_SIZE) )
     {
           // penalize out of sight shots, cumulative to effective range penalty
           iChance /= 2;
     }

будет наложен ополовинивающий шанс штраф.
Однако в игре такого не наблюдается.

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем bugmonster на 09.12.2012 в 10:20:27
Отладка прояснила следующее:

Засыл в расчёт прицельной линии умноженного на 2 MaxDistanceVisible

Code:
iSightRange = SoldierToBodyPartLineOfSightTest( pSoldier, sGridNo, pSoldier->bTargetLevel, pSoldier->bAimShotLocation, (UINT8) (MaxDistanceVisible() [b]* 2[/b]), TRUE );


приводит к тому что iSightRange ополовинивается, поэтому

Code:
iSightRange *= 2;

приводит iSightRange в нормальное состояние, при котором в общем случае он равен расстоянию до цели sDistVis*CELL_X_SIZE, поэтому штраф iChance /= 2 не накладывается.

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем MAn на 09.12.2012 в 11:48:21
2bugmonster:
Т.е. в  формуле расчета вероятности это удвоение  можно выкинуть, чтоб не пудрило мозги?

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем bugmonster на 09.12.2012 в 12:10:20
2MAn: Выкинул.

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем RadicalRex на 26.12.2012 в 07:09:27

on 1144738558, bugmonster wrote:
ВЛдальн = 3*(90-Lприц)/10

Вблизи даёт бонус, на расстоянии 1 клетки: 3*(9-1)=24. Получается что при меткости 75 ШП будет максимальным (99). Вот только мои мерки ухитрялись и в упор мазать.

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем KuJI на 03.09.2016 в 02:03:56
Народ, помогите!

У Вас очень непростые или неверные (?) формулы, я вообще с математикой на уровне обывателя дружил всегда.

Играю в оригинал, т.е. вероятность попасть в цель не указана.

1) Если, у нас целый боец с меткостью и параметрами под 90, с опытом около 5, хорошим и целым стволом, без прицельных приспособлений, то до кого расстояния примерно будет сохраняться вероятность попадания в цель в районе 90%? (без траты дополнительных АР на прицеливание?) Если в цель в зеленом секторе.

2) Трата дополнительных АР на прицеливание прибавляет 10% к вероятности попадания, верно?

3) И у Вас с оптикой с формулами что-то не так. Я все в эксель забил, уже и так, и так, ну полная чушь получается. На примере покажите какой эффект от очков и от оптики!

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем RadicalRex на 03.09.2016 в 16:57:12

on 1472857436, KuJI wrote:
Если, у нас целый боец с меткостью и параметрами под 90, с опытом около 5, хорошим и целым стволом, без прицельных приспособлений, то до кого расстояния примерно будет сохраняться вероятность попадания в цель в районе 90%?

Не более 9 клеток.

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем Ushwood на 23.10.2016 в 19:05:37

on 1472857436, KuJI wrote:
На примере покажите какой эффект от очков и от оптики!  
От оптики, если совсем на пальцах - каждый АР, потраченный на прицеливание, уменьшает эффективное расстояние на 20% от реального. Если с оптикой добавляешь 4 АР на прицеливание - считай, расстояние до цели впятеро (на 80%) меньше.
(Не распространяется на пенальти от прицельной дальности самого оружия.)

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем RadicalRex на 23.10.2016 в 19:47:22

on 1477238737, Ushwood wrote:
каждый АР, потраченный на прицеливание, уменьшает эффективное расстояние на 20% от реального. Если с оптикой добавляешь 4 АР на прицеливание - считай, расстояние до цели впятеро (на 80%) меньше.

Не совсем, там в формуле константа.
2 * APЫ_ПРИЦЕЛИВАНИЯ * (РАССТОЯН_В_КЛЕТКАХ - 6) / 10

Для дистанции 25 клеток:
2*4*(25-6)/10=15,2
(не знаю, нужно ли округлять до целого?)
Итого оптическая дальность:
25-15,2=9,8
Штраф, зависящий от оптической дальности:
3*(9,8-9)=2,4
Если шмаляем в голову, то дополнительный штраф:
3*9,8=29,4
Штраф, зависящий от прицельной дальности оружия (в примере АК-74 с дальностью 35):
(25*3-35)/1,7=23,5

При меткости 90, положении сидя, 4-х кликах прицеливания и наличии ЛЦУ:
90+10+40+20-23,5-29,4-2,4=104,7

Заголовок: Re: Расчёт вероятности попадания.
Прислано пользователем dracul на 29.05.2017 в 23:37:25
Вопрос, по 1.13 и оптики

В этом моде есть кратность оптики, но вот в формуле
2 * APЫ_ПРИЦЕЛИВАНИЯ * (РАССТОЯН_В_КЛЕТКАХ - 6) / 10
Этой самой кратности нет))) Я так понимаю, за место 2-ки ставим кратность? (т.е. прицел в изначальной игре имел как-бы х2)

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

Нашел сам)) Оптика приближает на определенное расстояние, так х10 дает 90% уменьшение эффективного расстояния до цели, а 2 кратная - всего 10%



A.I.M. » Powered by YaBB Modification 4 (v.4.0.0-pre)!
YaBB © 2000-2003. All Rights Reserved.