eks2004 писал(а):Сложнааа.
На самом деле - не особо, надо просто понять.
Возьмём, к примеру, дивизионную пушку Ф-22 из нашего мода (деск zis-3) и выстрелим из неё
shot_id pierce007 (урон и прочее рассматривать не будем, просто структуру работы)
Этому идентификатору соответствует
shot pierce007:
body trasser3 - след снаряда
checkstolb 1 - прямая траектория стрельбы (т.е. не навесом)
dz 10 - дед-зона
destroyland all -vor -unit - повреждает "землю" везде, за исключением: под воронками, под юнитом
explosionrnd 1 - вероятность проявления взрыва - всегда
explosion default spl007 - тип взрыва по умолчанию, т.е. если не указан для конкретной поверхности
explosion beton p007.b - тип взрыва для "поверхности"
beton и далее...
explosion dom p007.d
explosion gun p007.t
explosion light p007.t
explosion okop p007.o
explosion ship p003.dust
explosion tank p007.t
explosion tral p007.t
hitid pierce - идентификатор выстрела (из
hitsnames)
Разберём для наглядности выстрел по танку.
Мы в него попали: будет проигран
explosion tank p007.t
animats 2 - будет приграно две анимации
animat_1 blood_hit fl_shadow - первая
animat_2 splash fl_smoke 0 0 0 1 - вторая (с небольшим смещением, чтобы "разгрузить" процессор)
addshot crit007 - будет добавлен ещё один
shot - crit007
addshotdmg 1920 - демаг добавочного шота
addshotrnd .1 - вероятность его "появления" (в долях от 1)
addshotnum 1 1 - кол. анимаций, которое будет проиграно
sound tankhit .3 perm 0 1 - звук при попадании (будет звучать с приоритетом 0.3 и постоянно)
При этом будет как раз и задействована та самая формула, по которой танк и получит (или не получит) повреждение. А вот далее, если у нас сработает вероятность 0.1 (
addshotrnd .1), будет проигран еще один
shot - crit007:
checkstolb 1 - всё по аналогии выше
dz 10
explosionrnd 1
destroyland all -vor -unit
explosion ship crit007
explosion tank crit007 - именно этот
explosion у нас и проиграется
explosion tral crit007
hitid crewkiller - с этим идентификатором выстрела
Тут опять будет задествована та же формула, но уже с
hitid crewkiller с "силой" 1920
Едем по цепочке дальше,
explosion crit007:
addshot crit
addshotdmg 880
addshotrnd .75
addshotnum 1 1
addshotaccuracy 1 1
Этот выстрел мы не увидим (анимации нет), но он добавит еще один
shot crit силой
880 с вероятностью 0,75 и идентификатором
hitid building (см. ниже)
Смотрим
shot crit:
explosion ship crit_death
explosion tank crit_death
hitid building
Соответственно, т.к. у нас танк, мы увидим (если он сработает по вероятности)
explosion crit_death:
/не увидим, т.к анимации нет! - но он проиграется
addshot crit_death
addshotdmg 32500
addshotrnd .02
addshotnum 1 1
addshotaccuracy 1 1
И потянет за собой следом ещё один
shot crit_death силой
32500 с вероятностью 0,02 и идентификатором
hitid building (см. ниже)
explosion default tank_boom
hitid building
При этом опять будет проигран
explosion tank_boom:
animats 1
animat_1 ammoboom fl_max
vor 5
addshot fire_benz
addshotdmg 120
addshotrnd .03
addshotnum 1 5
addshotaccuracy 0 64
addshotdelay 1 40
sound explo_300up .3 perm 0 1
Который, в свою очередь, потянет
shot fire_benz силой
120 с вероятностью 0,03 разбросом от 0 до 64 и идентификатором
hitid fire (см. ниже), и "проиграется это от 1 до 5 раз:
dz 16
destroyland all -vor -zabor -most -unit
explosionrnd 1
explosion default fuel_tank
explosion water walkonwater
hitid fire
Посольку у нас танк (а по факту - уже земля, т.к. танк уже ... того...), а не вода, то проиграется анимация
explosion fuel_tank:
animats 3
animat_1 light_big fl_shadow
animat_2 cistern fl_smoke 0 16 0 0
animat_3 b_most_smoke fl_select 0 32 0 0
vor 2
addshot fire
addshotdmg 240
addshotrnd .61
addshotnum 1 100
addshotaccuracy 0 16
addshotdelay 25 30
sound fire .3 perm 0 1
Из него видно, что он тянет за собой
shot fire:
checkstolb 1
dz 16
destroyland all -vor -unit -zabor
explosionrnd 1
explosion default fire
explosion petrol fire_big
explosion plane fire_big
explosion vehicle fire_big
explosion water walkonwater
hitid fire
Который проиграет дефолтный
explosion fire:
animats 1
animat_1 fire fl_smoke
vor 5
addshot fire_sol
addshotdmg 64
addshotrnd .32
addshotnum 1 1
addshotdelay 0 5
Он, в свою очередь, потянет
shot fire_sol силой
64 с вероятностью 0,32 с задержкой от 0 до 5 и идентификатором
hitid fire (см. ниже):
checkstolb 1
dz 16
destroyland all -vor -unit -zabor -most
explosionrnd 1
explosion default solyara
explosion soldier fire
explosion water walkonwater
hitid fire
Который проиграет
explosion solyara:
animats 1
animat_1 fire fl_smoke
vor 5
addshot fire_sol
addshotdmg 32
addshotrnd .99
addshotnum 1 2
addshotaccuracy 0 3
addshotdelay 2 30
Который потянет
shot fire_sol силой
32 с вероятностью 0,99 разбросом от 0 до 3 с задержкой от 2 до 30 и идентификатором
hitid fire и будет проигран 1 или 2 раза.
Далее совсем интересно: круг замыкается (т.е. мы получаем петлю) и если бы вероятность была везде равна 1, то игра бы у нас "повисла" или, как минимум, стала бы дико тормозить.
Но, к счастью, вероятность у нас ниже еденицы и в игре мы увидим (конечно, в том случае, если "кривая" доползет до этого места) что подбитый танк будет гореть, причем делать он это будет:
1. довольно долго
2. рандомно (т.е. каждый раз по новой схеме)
3. "бензин" от горящего танка (уже давно остова) будет "растекаться" и гореть так же рандомно.
Вот такая простенькая схемка просчитывается (надо понимать, что ДЛЯ КАЖДОГО шота движек задействует ту самую формулу) при каждом выстреле каждого оружия каждого юнита в игре
eks2004 писал(а):сложно ли будет подсчитать, сколько дамага получит танк противника при эдакой броне и эдаким уроном моего снаряда?
напишу попозжее, а то мозоли на пальцах уже.