У каждого типа объектов свой метод обсчета урона от взрыва. Танки считаются совершенно не так как дома...
Для домов:
recivedPower = Power*(1-dist/Radius)^2
простенько и без изысков - далее этот урон сравнивается с параметрами TNT_MIN и TNT_MAX этого дома.
Для танков используется следующий порядок подсчета:
f = 1/(dist^1.200000047683716)
if f>=0.5 then f=0.5
recivedTNTPower = Power*f
recivedTNTPower *= Rnd(0.95,1.05) (прикольно - типа плюс-минус 5% разброс)
Далее в зависимости от recivedTNTPower и PANZER_TNT_TYPE танка, вот по этой табличке получается некое значение (f2 для примера):
(по горизонтали - recivedTNTPower, по вертикали - PANZER_TNT_TYPE)
0.5 1.0 2.25 6.25 12.0 22.5 62.5
1 9999 15 3 2 0.7 0.0 0.0 ; tanks 7 tonns
2 9999 60 15 8 0.9 0.0 0.0 ; tanks 12 tonns
3 9999 9999 2000 100 1.3 0.8 0.0 ; tanks 22 tonns
4 9999 9999 9999 2000 1.4 0.9 0.0 ; tanks 31 tonns
5 9999 9999 9999 2500 2.0 1.0 0.0 ; tanks 45 tonns
6 9999 9999 9999 3000 4.0 1.5 0.0 ; tanks 55 tonns
7 9999 9999 9999 5000 7.0 2.0 0.0 ; tanks 70 tonns
и вступает в действие вот такая конструкция:
if ((f2 < 1000.0) && (((f2 <= 1.0) || (RndB(1.0 / f2))))) then "танк убит"
т.е. если f2 больше либо равен 1000 - танк однозначно цел
если f2 меньше, либо равен 1 - танк однозначно уничтожен
если внутри "вилки" - кидается rnd - RndB() возвращает истину, если ее параметр (в данном случае 1/f2) больше случайного числа от 0 до 1.
Артиллерия и машины считаются аналогичным образом, только таблички другие...