Взято тут: Закончил анализ кода боевой процедуры абордажа. Для версии ...
X3 Terran Conflict / X3 Земной конфликт
 
X3 Terran conflict  
 

На сайте онлайн (человек): 70



 



Взято тут: Закончил анализ кода боевой процедуры абордажа. Для версии ...

Terran Conflict (X3TC) / Форум / Форум по игре X3 Terran Conflict (X3TC) / X3 Земной конфликт / Абордаж

Автор: room
(09.01.2011 15:21:04)

Взято тут:
Закончил анализ кода "боевой" процедуры абордажа.
Для версии 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

дерево темы → Абордаж Абордаж »
Список игр