Взято тут: Закончил анализ кода "боевой" процедуры абордажа. Для версии 2.5 такой анализ частично делал dead0k, алгоритмических отличий в этой части в версии 3.0 нет, разница только в параметрах кораблей.
Первоисточник, он же источник вдохновения -
Анализ кода в версии 3.0 Cкрытый текст (кликните здесь для просмотра)
Сирокко из рассмотрения исключен, у него нестандартное количество десанта, но формулы те же самые, желающие могут пересчитать.
Константы влияющие на процесс боя: показатель защиты, количество палуб, максимальное количество десанта. M1 M2 M7 TL TM M6 50 45 30 30 20 10 - показатель защиты 5 5 4 5 2 3 - количество палуб 20 20 20 20 5 5 - максимальное количество десанта
Далее для каждой палубы: Рассчитываются потери среди нападавших. Проверки, которые никогда не сработают на оригинальной игре 3.0 из рассмотрения выкинуты. AttackCasualties = (GetMaxMarines() + 1) / GetDeckNumber() + SE_Random(3) - 1 M1 - 3 ... 5 M2 - 3 ... 5 M7 - 4 ... 6 TL - 3 ... 5 TM - 2 ... 4 M6 - 1 ... 3
Считаем уровень защиты. Для ксенонов - DefenceLevel = <показатель зашиты> * 2 + 85 * GetMaxMarines() - 80 * <количество зачищенных палуб>. Вражеские маринки и защитные лазеры на ксенонских кораблях не учитываются. Для землян DefenceLevel = <показатель зашиты> * 4 + <суммарный боевой уровень защищающихся>, если установлены лазеры, то еще + 200. Для всех остальных DefenceLevel = <показатель зашиты> + <суммарный боевой уровень защищающихся>, если установлены лазеры, то еще + 200. Результаты, без учета обороняющихся маринок: M1 M2 M7 TL TM M6 50 45 30 30 20 10 - без лазеров 250 245 230 230 220 210 - с лазерами 200 180 120 120 40 - Земляне, без лазеров 400 380 320 320 240 - Земляне, с лазерами 1800 1790 1760 445 - Ксенон
Считаем уровень атаки. Это суммарный боевой уровень живых маринок. Число абордажей в расчетах не участвует. Наличие всяческой мишуры (ручного оружия) в трюме так же ни на что не влияет.
Кидаем кубики. DefenceLevel и AttackLevel меняются +-10%. Совсем +10% выпасть не может, максимально возможный вариант +10% -1. -10% выпасть может.
Далее корректируется AttackCasualties(AC), в зависимости от значения DefenceLevel - AttackLevel. Если DefenceLevel - AttackLevel меньше или равно 40, то с вероятностью 2% AttackCasualties будет увеличена на 1, в остальных случаях результат такой: 550 < DefenceLevel - AttackLevel AC * 3 400 < DefenceLevel - AttackLevel <= 550 AC * 2 150 < DefenceLevel - AttackLevel <= 400 AC + (AC + 1) / 2 40 < DefenceLevel - AttackLevel <= 150 AC + 1 -40 <= DefenceLevel - AttackLevel <= 40 AC -150 <= DefenceLevel - AttackLevel < -40 AC - 1 -400 <= DefenceLevel - AttackLevel < -150 AC - (AC + 1) / 2 -550 <= DefenceLevel - AttackLevel < -400 AC - 3
DefenceLevel - AttackLevel < -550 0
Если AttackCasualties больше 0, то идет игра "О счастливчик". Каждый раунд разыгрывается только среди живых, количество раундов - AttackCasualties. Шансы каждого десантника 10 - (GetMarineFighting() - 1) / 10. Все шансы складываются в общую кучу и выбирается один. "Счастливчик" выбывает.
Рассчитываются потери среди обороняющихся, количество рассчитывается по тем же формулам, но используется AttackLevel - DefenceLevel, что логично. Шансы на выбывание для обороняющихся равны, их боевой уровень не учитывается.
Процесс повторяется снова и снова, пока не пройдены все палубы.
После того, как все палубы защищены, идет последняя перестрелка у входа в рубку.
Заново считаем DefenceLevel. Для ксенонов формула другая DefenceLevel = <показатель зашиты> * 2 + 85 * GetMaxMarines() - 50 * <количество палуб>. M1 - 1550, M2 - 1540, M7 - 1560, M6 - 295. Для всех остальных расчет по прежней формуле.
Заново считаем AttackLevel, формула старая.
Кидаем кубики, на этот раз DefenceLevel и AttackLevel меняются +-15%. Максимально возможный вариант +15% -1, минимально возможный -15%.
Если DefenceLevel больше или равен AttackLevel, то абордаж провален и все маринки бесславно погибают. Если AttackLevel больше DefenceLevel, то все оставшиеся на корабле вражеские десантники (если, конечно остались), дружно одевают скафандры и выпрыгивают в космос, а наши бравые маринки начинают ломать компьютер.
Об инженерах: На каждой палубе корпус ломается на 60% * (100 - <средний уровень инженерной подготовки>) / 100 / GetDeckNumber() На каждой палубе корпус ломается в 4 приема, первые три раза - случайно, а четвертый сколько осталось до заранее рассчитанной величины. После каждого повреждения корпуса проверка - если осталось меньше 5%, то делаем ноги.
Больше инженерия ни на что не влияет. Cохранность оружия от нее не зависит, при захвате малых и больших кораблей вызывается одна и та же функция. Маринки в ней никак не учитываются, только тупой рандом (лазеры, шиты, ракеты - 10% сохранности, кионки - 50%, остальной груз не смотрел).
Результаты анализа
Выстелить дорогу к рубке трупами маринок не знающих, с какой стороны у ружья приклад, не получится. Если после зачистки последней палубы не наберется нужное количество суммарного боевого опыта - умрут все. Базовые значения для кораблей без десантников, с поправкой на рандом для прохода к рубке надо набрать от 74% до 135%. M1 M2 M7 TL TM M6 50 45 30 30 20 10 - без лазеров 250 245 230 230 220 210 - с лазерами 200 180 120 120 40 - Земляне, без лазеров 400 380 320 320 240 - Земляне, с лазерами 1550 1540 1560 295 - Ксенон
Таблица суммарного боевого уровня, необходимая для уверенного (98%) прохождения палубы без потерь. M1 M2 M7 TL TM M6 673 667 648 648 469 457 - без лазеров 917 911 893 893 714 702 - с лазерами 856 832 758 758 494 - Земляне, без лазеров 1100 1076 1003 1003 738 - Земляне, с лазерами
Таблица суммарного боевого уровня, начиная с которого возможно прохождение палубы без потерь. На практике этими значениями обольщатся не надо - вероятность прохождения палубы без потерь для них составляет доли процента. Таблица приведена, в основном, для оценки, что можно захватить с M6. M1 M2 M7 TL TM M6 405 401 525 389 380 45 - без лазеров 569 565 689 552 554 209 - с лазерами 528 511 599 462 70 - Земляне, без лазеров 691 675 762 626 233 - Земляне, с лазерами 1839 1830 1942 402 - Ксенон
Результаты, мягко говоря, озадачивают. Из них следует, что 5 полностью прокаченных маринок имеют шансы взять корабли содружества без потерь (при условии, что там нет лазеров, обороняющихся и это не M7), а так же попытать счастья на любых M6.
Экспериментально эти результаты пока не проверял, займусь, когда будет время.
Полезные ссылки по теме: Прорезка корпуса by vivere. В 3.0 без изменений. https://x3tc.net/x3_forum/message.php?mid=94324
Бой на палубах by dead0k (2.5), без учета перестрелки у рубки В 3.0 изменились параметры кораблей.
Взлом компьютера by vivere. В 3.0 без изменений. https://x3tc.net/x3_forum/message.php?mid=95304 |