AviaSkins.Forums

AviaSkins.Forums (http://forum.aviaskins.com/index.php)
-   Баллада об оружии (http://forum.aviaskins.com/forumdisplay.php?f=32)
-   -   TNT-MOD [Мод Взрывчатых Веществ] (http://forum.aviaskins.com/showthread.php?t=1213)

ZloyPetrushkO 09.02.2010 12:23

в общем почитываю тему. имхо, использование инженерного подхода и качественных источников делает етот мод весьма привлекательным для реализации. я бы его включил в свой реал пак :)

в чем конкретно проблемы с реализацией? что нужно конкретно сделать для реализации?

типовые данные о бомбе:

Цитата:

Property.set(var_class, "mesh", "3DO/Arms/250kgBomb/mono.sim");
Property.set(var_class, "radius", 125.0F);
Property.set(var_class, "power", 125.0F);
Property.set(var_class, "powerType", 0);
Property.set(var_class, "kalibr", 0.408F);
Property.set(var_class, "massa", 250.0F);
Property.set(var_class, "sound", "weapon.bomb_mid");
собсна вопрос, правильно ли я понимаю, что для реализации мода правки етих параметров хватит?


Цитата:

Сообщение от 23AG_Black (Сообщение 45501)
Во-первых, большинство из дискутирующих (включая меня) в модостроении и в программировании на яве - не совсем "коппенгагены" ;) Поэтому обращаться с этим придется уже к тем, кто умеет.

ну почему? если только лишь правка приведенных выше параметров- ради такого мода готов предоставить необходимый пакет технологий :)
данные о бомбах нужны?


Цитата:

Сообщение от 23AG_Black (Сообщение 45501)
Дальше. Угол подлета бомбы и влияние его на конфигурацию поля рассеивания учесть можно (даже нужно, ибо тогда это все можно прикручивать не только к бомбам, но и к РСам). Все тогда упирается в расчет расстояний до техники в системе полярных координат (выбрать технику, попавшую под воздействие).

а оно сильно влияет? имхо, не стоит оно того... ибо етот параметр надо будет просчитывать при старте бомбы(самое простое) а потом значит отправлять в бомбу. а ето есть само по себе достаточно не просто :)

Цитата:

Сообщение от 23AG_Black (Сообщение 45501)

Основная проблема с игрой - в расчет на поражение передается какая-то усредненная энергия, завязанная на мощность (параметр бомбы) и радиус (тоже параметр бомбы). Если применять реальные расчеты - этих параметров должно быть 2 (от осколочного и фугасного поражения). Либо попытаться эмпирически подогнать эти параметры к полученным по формулам. Т.е. либо мы приводим эти расчеты к той же суммарной энергии (как есть сейчас в игре), либо переделываем всю наземку (и скорее всего зданий), указывая минимум 2 таблицы для вероятностей поражения.

мое имхо- 1 путь. у нас таки моделлирование, и главное преимущество 1 пути- то что он релализуем :)

SLON 09.02.2010 13:35

Цитата:

Сообщение от ZloyPetrushkO (Сообщение 45502)
собсна вопрос, правильно ли я понимаю, что для реализации мода правки етих параметров хватит?
а оно сильно влияет?
:)

не совсем, необходимо будет вводить еще несколько констант
http://img716.imageshack.us/img716/2994/135932.png

SG2_Wasy 09.02.2010 14:27

Цитата:

Сообщение от SLON (Сообщение 45507)
не совсем, необходимо будет вводить еще несколько констант

Ага, а помимо того чтобы ввести пару констант, нужно полностью изменять физ модель взрыва в игре... что мне кажется и сильно повлияет на воздействие ОФЗ на самолеты....

Мое имхо, проще отработать то что есть. Ебо мусолить формулы это одно, а практически реализовать - совершенно другое.

P.S. Трудно картинку в джепег пережать?

JGr124_boRada 09.02.2010 14:40

Цитата:

Сообщение от ZloyPetrushkO (Сообщение 45502)
типовые данные о бомбе:

Property.set(var_class, "mesh", "3DO/Arms/250kgBomb/mono.sim");
Property.set(var_class, "radius", 125.0F);
Property.set(var_class, "power", 125.0F);
Property.set(var_class, "powerType", 0);
Property.set(var_class, "kalibr", 0.408F);
Property.set(var_class, "massa", 250.0F);
Property.set(var_class, "sound", "weapon.bomb_mid");

собсна вопрос, правильно ли я понимаю, что для реализации мода правки етих параметров хватит?

Посмотри пожалуйста как и где применяется powerType
именно этот параметр и отвечает за тип бомбы, насколько я помню.
Существующих параметров вполне хватит, не надо ничего добавлять углублять и расширять!
Изменение ДМ объектов - совершенно другая тема, хотя и зависимая. Если мы сумеем ввести в формулы тип бомбы, то вполне реально подогнать юомбы ближе к правильной зависимости. Заметьте - я говорбю о зависимости, а не реальных параметрах поражения.

В общем хорошо бы, чтоб толковый перец свел в одну кучу всё что обсчитывается сейчас в игре. Чтоб знать от чего оттолкнутся.

SG2_Wasy 09.02.2010 14:47

Цитата:

Сообщение от JGr124_boRada (Сообщение 45522)
Посмотри пожалуйста как и где применяется powerType
именно этот параметр и отвечает за тип бомбы, насколько я помню.

Имхо, ни за что большое чем внешний эффект он не отвечает.
Просто взрыв
Взрыв с долгим дымом (АЖ-2)
Взрыв с пламенем.

SLON 09.02.2010 14:48

Цитата:

Сообщение от SG2_Wasy (Сообщение 45516)
Ага, а помимо того чтобы ввести пару констант, нужно полностью изменять физ модель взрыва в игре... что мне кажется и сильно повлияет на воздействие ОФЗ на самолеты....
Мое имхо, проще отработать то что есть. Ебо мусолить формулы это одно, а практически реализовать - совершенно другое.
P.S. Трудно картинку в джепег пережать?

ФМ менять не нужно, я говорю о определении вероятности поражения, фугасным (суммарным удельным импульсом или избыточным давлением) или осколочным действием в зависимости от типа б/п.

SG2_Wasy 09.02.2010 14:51

Цитата:

Сообщение от SLON (Сообщение 45524)
ФМ менять не нужно, я говорю о определении вероятности поражения, фугасным (суммарным удельным импульсом или избыточным давлением) и осколочным действием.

Нету это ничего в игре, НЕТУ.

JGr124_boRada 09.02.2010 15:03

http://forum.aviaskins.com/showpost....4&postcount=46
Это формулы из игры
по крайней мере в них не использован тип бомбы.
А если ввести одну переменную=тип бомбы? Расчет будет идти так же по энергии, но её распределение можно в некоторых пределах регулировать.
Например для домов тип=0 ( фугас) имеет коэффициент 1, а тип=1( осколочные) 0.5
Для пушек и машин - наоборот.
Это очень упрощенно но уже действенно и безболезненно для процессора и программирования.

ZloyPetrushkO 09.02.2010 15:08

Борада, а из каких классов ты ети формулы то выдрал?
про паур тайп гляну...

JGr124_boRada 09.02.2010 15:08

Цитата:

Сообщение от ZloyPetrushkO (Сообщение 45531)
Борада, а из каких классов ты ети формулы то выдрал?
про паур тайп гляну...

Да у меня только цитаты с сухого. Классы незнаю. :(

ZloyPetrushkO 09.02.2010 16:30

тэкс, посмарел цепочку.
в общем бомба летит летит летит и встречаеться с землей. происходят всякие перетурьации, и запускаеться вот что

Код:

protected void doExplosion(Actor actor, String s, Point3d point3d) {
/* 250*/        Class class1 = getClass();
/* 251*/        float f = Property.floatValue(class1, "power", 1000F);
/* 252*/        int i = Property.intValue(class1, "powerType", 0);
/* 253*/        float f1 = Property.floatValue(class1, "radius", 150F);
/* 254*/        MsgExplosion.send(actor, s, point3d, getOwner(), M, f, i, f1);
/* 256*/        ActorCrater.initOwner = getOwner();
/* 257*/        Explosions.generate(actor, point3d, f, i, f1);
/* 258*/        ActorCrater.initOwner = null;
/* 260*/        destroy();
            }

explosions generate отвечает за визуальные эффекты, нам мало интересно

нас интересует

MsgExplosion.send

вот он:
Код:

{
00024        explosion.chunkName = s;
00025        explosion.p.set(point3d);
00026        explosion.radius = f2;
00027        explosion.initiator = actor1;
00028        explosion.power = f1;
00029        explosion.powerType = i;
00030        if(i == 1)
00031            explosion.computeSplinterParams(f);

00032        if(!Actor.isValid(actor1) && Mission.isSingle() && (Mission.cur().netObj() == null || Mission.cur().netObj().isMaster()))
00033            explosion.initiator = actor1 = Engine.actorLand();
00034        if(!Actor.isValid(actor1))
00035            return;
00036        if(actor1.isNet() && actor1.net.isMirror())
00037            return;
00038        if(Actor.isValid(actor))
00039        {
00040            msg.setListener(actor);
00041            msg.send();
00042        }
00043        if(f2 <= 0.0F)
00044            return;
00045        Engine.collideEnv().getSphere(lst, point3d, f2);
00046        int j = lst.size();
00047        if(j <= 0)
00048            return;
00049        explosion.chunkName = null;
00050        for(int k = 0; k < j; k++)
00051        {
00052            Actor actor2 = (Actor)lst.get(k);
00053            if(Actor.isValid(actor2) && actor != actor2)
00054            {
00055                msg.setListener(actor2);
00056                msg.send();
00057            }
00058        }
00059
00060        lst.clear();
00061    }

а вот тута запускаецца собна и обсчитываеться сам взрыв.
выделено- там где powertype 1 запускаеться 1 лишний метод(условно моно перевести как "пересчет осколков", т.е. вычисление кол-ва осколков. так что есть разделение :))

правда пока неизвестно, рассчитываеться ли повреждение от осколков...мб ето токо заготовка :)

а вот собсна сам код взырвов:

Код:

// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
00002 // Jad home page: http://www.kpdus.com/jad.html
00003 // Decompiler options: packimports(3)
00004 // Source File Name:  Explosion.java
00005
00006 package com.maddox.il2.ai;
00007
00008 import com.maddox.JGP.Point3d;
00009 import com.maddox.il2.engine.*;
00010
00011 // Referenced classes of package com.maddox.il2.ai:
00012 //            World, RangeRandom
00013
00014 public class Explosion
00015 {
00016
00017    public Explosion()
00018    {
00019        p = new Point3d();
00020    }
00021
00022    void computeSplinterParams(float f)
00023    {
00024        float f1 = f * 0.9F;
00025        nSplinters = f1 / 0.015F;
00026        if(nSplinters < 0.5F)
00027        {
00028            nSplinters = 0.0F;
00029            return;
00030        } else
00031        {
00032            return;
00033        }
00034    }
00035
00036    public float computeSplinterSpeed(float f)
00037    {
00038        if(f <= 0.01F)
00039            return 650F;
00040        if(f >= radius)
00041        {
00042            return 150F;
00043        } else
00044        {
00045            float f1 = f / radius;
00046            return 650F * (1.0F - f1) + 150F * f1;
00047        }
00048    }
00049
00050    public void computeSplintersHit(Point3d point3d, float f, float f1, float af[])
00051    {
00052        float f2 = (float)point3d.distance(p) - f;
00053        if(f2 <= 0.001F)
00054        {
00055            af[0] = nSplinters * 0.5F;
00056            af[1] = computeSplinterSpeed(f2);
00057        }
00058        float f3 = 3.141593F * f * f;
00059        float f4 = 12.56637F * f2 * f2;
00060        float f5 = (nSplinters * f3) / f4;
00061        if(f5 >= nSplinters * 0.5F)
00062            f5 = nSplinters * 0.5F;
00063        af[0] = f5;
00064        af[1] = computeSplinterSpeed(f2);
00065    }
00066
00067    public boolean isMirage()
00068    {
00069        if(!Actor.isValid(initiator))
00070            return true;
00071        else
00072            return initiator.isNetMirror();
00073    }
00074
00075    public float receivedPower(ActorMesh actormesh)
00076    {
00077        float f = actormesh.collisionR();
00078        float f1 = (float)((Actor) (actormesh)).pos.getAbsPoint().distance(p);
00079        f1 -= f;
00080        if(f1 >= radius)
00081            return 0.0F;
00082        float f2 = 1.0F - f1 / radius;
00083        f2 *= f2;
00084        if(f2 >= 1.0F)
00085            return power;
00086        else
00087            return f2 * power;
00088    }
00089
00090    public float receivedTNT_1meter(float f)
00091    {
00092        if(f >= radius)
00093            return 0.0F;
00094        if(f < 1.0F)
00095            return power;
00096        else
00097            return power / (f * f);
00098    }
00099
00100    public float receivedTNT_1meter(Point3d point3d, float f)
00101    {
00102        float f1 = (float)point3d.distance(p) - f;
00103        return receivedTNT_1meter(f1);
00104    }
00105
00106    public float receivedTNT_1meter(ActorMesh actormesh)
00107    {
00108        float f = (float)((Actor) (actormesh)).pos.getAbsPoint().distance(p) - actormesh.collisionR();
00109        return receivedTNT_1meter(f);
00110    }
00111
00112    public float receivedTNTpower(ActorMesh actormesh)
00113    {
00114        float f = actormesh.collisionR();
00115        float f1 = (float)((Actor) (actormesh)).pos.getAbsPoint().distance(p) - f;
00116        if(f1 <= 0.0F)
00117            return 0.5F * power;
00118        float f2 = 1.0F / (float)Math.pow(f1, 1.2000000476837158D);
00119        if(f2 <= 0.0F)
00120            return 0.0F;
00121        if(f2 >= 0.5F)
00122            f2 = 0.5F;
00123        return f2 * power;
00124    }
00125
00126    public static boolean killable(ActorMesh actormesh, float f, float f1, float f2, float f3)
00127    {
00128        float f4 = f;
00129        if(f4 <= f1)
00130            return false;
00131        if(f4 >= f2)
00132        {
00133            return true;
00134        } else
00135        {
00136            float f5 = (f4 - f1) / (f2 - f1);
00137            f3 += (1.0F - f3) * f5;
00138            return World.Rnd().nextFloat(0.0F, 1.0F) < f3;
00139        }
00140    }
00141
00142    public static final int POWER_SPLASH = 0;
00143    public static final int POWER_SPLINTERS = 1;
00144    public static final int POWER_NAPALM = 2;
00145    public static final float SPLINTER_MASS = 0.015F;
00146    private static final float SPLINTERS_K = 0.9F;
00147    public String chunkName;
00148    public Point3d p;
00149    public float radius;
00150    public Actor initiator;
00151    public float power;
00152    public int powerType;
00153    private float nSplinters;
00154
00155 }


собсна вот ото всего вот етого можете отталкиваеться...вот формулы моделирования взрыва в игре...сами формулы моно если что подрихтовать :)
исходя из этого и стоитпересчитывать пармеетры бомб :)
по воводу добавлений. скажу сразу, ето можно делать только В КРАЙНЕМ случае, если ето координально меняет картину. ибо сделать можно, но работы много( грю про ся, мб программер опытнее лучше сделает)

ZloyPetrushkO 09.02.2010 16:53

и еще...учтите, что если рихтовать формулы, то эффект будет для ВСЕХ взрывов :)
-----
а Борада как раз скинул пост с цитатами, объясняющими действие етих формул. вот такие дела :)

JGr124_boRada 09.02.2010 17:21

ыыы.. а в человеческий язык можно перевести? А то я не врубаюсь что такое f а что f1 и прочее.....

Сами формулы работают то достаточно нормально, не надо их менять. А менять исходные данные. Ну и желательно всеж разделить осколочные, если этого нет.

ZloyPetrushkO 09.02.2010 18:28

тэкс) а теперь вторая часть алгоритма просчета))


в общем, в представленном выше коде для каждого объекта есть своя модель взрыва. соотвественно, после запуска взрыва для каждого объекта вызываеться свой расчет повреждений и по ней ведеться расчет.
если бомба осколочная, и объект чувтсивтелен: а ето танки,дома, самолеты к осколкам сначала идет расчет осколков вот по такому коду:

количество осколков:
Код:

00022    void computeSplinterParams(float f)
00023    {
00024        float f1 = f * 0.9F;
00025        nSplinters = f1 / 0.015F;
00026        if(nSplinters < 0.5F)
00027        {
00028            nSplinters = 0.0F;
00029            return;
00030        } else
00031        {
00032            return;
00033        }
00034    }

скорость осколков:
Код:

00036    public float computeSplinterSpeed(float f)
00037    {
00038        if(f <= 0.01F)
00039            return 650F;
00040        if(f >= radius)
00041        {
00042            return 150F;
00043        } else
00044        {
00045            float f1 = f / radius;
00046            return 650F * (1.0F - f1) + 150F * f1;
00047        }
00048    }


само поражение от осколков:
Код:

00050    public void computeSplintersHit(Point3d point3d, float f, float f1, float af[])
00051    {
00052        float f2 = (float)point3d.distance(p) - f;
00053        if(f2 <= 0.001F)
00054        {
00055            af[0] = nSplinters * 0.5F;
00056            af[1] = computeSplinterSpeed(f2);
00057        }
00058        float f3 = 3.141593F * f * f;
00059        float f4 = 12.56637F * f2 * f2;
00060        float f5 = (nSplinters * f3) / f4;
00061        if(f5 >= nSplinters * 0.5F)
00062            f5 = nSplinters * 0.5F;
00063        af[0] = f5;
00064        af[1] = computeSplinterSpeed(f2);
00065    }


еще есть для некоторых типов радиус, в котором возможно поражение. он называеться вот так, и рбаотает тоже так:
Код:

static boolean com.maddox.il2.ai.Explosion.killable          (          ActorMesh            actormesh,
                float          f,
                float          f1,
                float          f2,
                float          f3       
        )                        [static]

Definition at line 126 of file Explosion.java.

00127    {
00128        float f4 = f;
00129        if(f4 <= f1)
00130            return false;
00131        if(f4 >= f2)
00132        {
00133            return true;
00134        } else
00135        {
00136            float f5 = (f4 - f1) / (f2 - f1);
00137            f3 += (1.0F - f3) * f5;
00138            return World.Rnd().nextFloat(0.0F, 1.0F) < f3;
00139        }
00140    }


теперь поехали по типам...

Здания:
расчет:
Код:

{
00077        float f = actormesh.collisionR();
00078        float f1 = (float)((Actor) (actormesh)).pos.getAbsPoint().distance(p);
00079        f1 -= f;
00080        if(f1 >= radius)
00081            return 0.0F;
00082        float f2 = 1.0F - f1 / radius;
00083        f2 *= f2;
00084        if(f2 >= 1.0F)
00085            return power;
00086        else
00087            return f2 * power;
00088    }

условие умиранияот фугасок:
Код:

if(Explosion.killable(this, explosion.receivedPower(this), prop.MIN_TNT, prop.MAX_TNT, prop.PROBAB_DEATH_WHEN_EXPLOSION))
00498                die(explosion.initiator, true);
00499            return;

условие умирания от осколочных бомб:
Код:

float af[] = new float[6];
00480            mesh().getBoundBox(af);
00481            pos.getAbs(p);
00482            p.x = (p.x - (double)af[0]) + (double)(af[3] - af[0]);
00483            p.y = (p.y - (double)af[1]) + (double)(af[4] - af[1]);
00484            p.z = (p.z - (double)af[2]) + (double)(af[5] - af[2]);
00485            float af1[] = new float[2];
00486            explosion.computeSplintersHit(p, mesh().collisionR(), 0.7F, af1);
00487            Explosion _tmp1 = explosion;
00488            float f = 0.015F * af1[1] * af1[1] * 0.5F;
00489            float f1 = ComputeProbabOfPenetrateKill(f, (int)(af1[0] + 0.5F));
00490            if(RndB(f1))
00491                die(explosion.initiator, true);


-------


для поездов, людей, кораблей, ракетной артиллерии(катюш чтоли?), парашютистов, мостов и самолетов: вот етот расчет(если я прально понял)

Код:

{
00092        if(f >= radius)
00093            return 0.0F;
00094        if(f < 1.0F)
00095            return power;
00096        else
00097            return power / (f * f);
00098    }

условие умирания(на примере корабля)
Код:

float f = explosion.power;
00675            Explosion explosion1 = explosion;
00676            if(explosion.powerType == 2 && explosion.chunkName != null)
00677                f *= 0.45F;
00678            float f1;
00679            if(explosion.chunkName != null)
00680            {
00681                float f2 = f;
00682                f2 *= Rnd(1.0F, 1.1F);
00683                if(f2 < prop.stre.EXPLHIT_MIN_TNT)
00684                    return;
00685                f1 = f2 / prop.stre.EXPLHIT_MAX_TNT;
00686            } else
00687            {
00688                float f3 = explosion.receivedTNT_1meter(this);
00689                f3 *= Rnd(1.0F, 1.1F);
00690                if(f3 < prop.stre.EXPLNEAR_MIN_TNT)
00691                    return;
00692                f1 = f3 / prop.stre.EXPLNEAR_MAX_TNT;
00693            }
00694            life -= f1;
00695            if(life <= 0.0F)
00696                Die(explosion.initiator, -1L, true);
00697        }


------
для танков,артиллерии,машин, самолетов и статических юнитов
вот ето:

Код:

{
00114        float f = actormesh.collisionR();
00115        float f1 = (float)((Actor) (actormesh)).pos.getAbsPoint().distance(p) - f;
00116        if(f1 <= 0.0F)
00117            return 0.5F * power;
00118        float f2 = 1.0F / (float)Math.pow(f1, 1.2000000476837158D);
00119        if(f2 <= 0.0F)
00120            return 0.0F;
00121        if(f2 >= 0.5F)
00122            f2 = 0.5F;
00123        return f2 * power;
00124    }


условие умирания на прмиере танка:
от осколочных:
Код:


00902            int i = explosion.powerType;
00903            if(explosion == null);
00904            if(i == 1)
00905            {
00906                if(splintersKill(explosion, prop.fnShotPanzer, Rnd(0.0F, 1.0F), Rnd(0.0F, 1.0F), this, 0.7F, 0.25F, prop.PANZER_BODY_FRONT, prop.PANZER_BODY_SIDE, prop.PANZER_BODY_BACK, prop.PANZER_BODY_TOP, prop.PANZER_HEAD, prop.PANZER_HEAD_TOP))
00907                    Die(explosion.initiator, false);
00908            }


от остальных бомб:
Код:

else
00909            {
00910                int j = explosion.powerType;
00911                if(explosion == null);
00912                if(j == 2 && explosion.chunkName != null)
00913                {
00914                    Die(explosion.initiator, false);
00915                } else
00916                {
00917                    float f;
00918                    if(explosion.chunkName != null)
00919                        f = 0.5F * explosion.power;
00920                    else
00921                        f = explosion.receivedTNTpower(this);
00922                    f *= Rnd(0.95F, 1.05F);
00923                    float f1 = prop.fnExplodePanzer.Value(f, prop.PANZER_TNT_TYPE);
00924                    if(f1 < 1000F && (f1 <= 1.0F || RndB(1.0F / f1)))
00925                        Die(explosion.initiator, true);
00926                }
00927            }



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


вот тако оно собсна рассчитывает...теперь зная ети формулы и способы вычисления осталось просчитать исходные параметры так, чтобы получалось похоже на нужный результат :)
или если совсем косяки в формулах-подрихтовать формулы :)
токо помните, что рихтовка формул отразиться на всех объектах данного типа!
вводить новые параметры бомб, ровно как и менять типа объектов низя.

ZloyPetrushkO 09.02.2010 18:39

итого...порядок причесывания имхо сводиться к такому.
1)знаем данные о реальных бомбах
2) вычисляем данные о эффекте РЕАЛЬНЫХ бомб
3) берем какую либо точку в зоне поражения, и сравниваем отношение эффекта от 2 бомб в реале. запоминаем ето отношение
4) берем данные о игровых бомбах, по формулам считаем дамаг для какогонибудь случая. например для авто. далее берем отношение етих дамагов в точке для двух бомб
5) сравнениваем отношение дамагов к отношению эффективности
6) если большое различие- правим игровые исходные данные, что различие уменьшилось. вот так :)
мое имхо :)

JGr124_boRada 09.02.2010 19:18

Чудненько! Спасибо за перевод! Думаем....
Цитата:

Сообщение от ZloyPetrushkO (Сообщение 45553)
итого...порядок причесывания имхо сводиться к такому.
1)знаем данные о реальных бомбах
2) вычисляем данные о эффекте РЕАЛЬНЫХ бомб
3) берем какую либо точку в зоне поражения, и сравниваем отношение эффекта от 2 бомб в реале. запоминаем ето отношение
4) берем данные о игровых бомбах, по формулам считаем дамаг для какогонибудь случая. например для авто. далее берем отношение етих дамагов в точке для двух бомб
5) сравнениваем отношение дамагов к отношению эффективности
6) если большое различие- правим игровые исходные данные, что различие уменьшилось. вот так :)
мое имхо :)

Именно!

JGr124_boRada 09.02.2010 19:57

Вопрос, а при расчете осколков что передается функции
void computeSplinterParams(float f)
PS Предварительный просмотр показывает, что достаточно тщательно просчитывается действие бомб ( лучше чем я ожидал). Теперь точно уверен что добавлять ничего ненадо.
Единственно, есть одна хотелка - внести небольшую зависимость от задержки взрывателя ( а может уже и есть?)

ZloyPetrushkO 09.02.2010 20:10

туда передается масса :)

Цитата:

Сообщение от JGr124_boRada (Сообщение 45564)
Единственно, есть одна хотелка - внести небольшую зависимость от задержки взрывателя ( а может уже и есть?)

по моему это лишнее :) мое имхо.

JGr124_boRada 09.02.2010 20:22

Цитата:

Сообщение от ZloyPetrushkO (Сообщение 45568)
туда передается масса :)

по моему это лишнее :) мое имхо.

Почему, поясню.
При задержке близкой к нулю осколочные будут наиболее эффективны ( не зарываются в грунт - соответственно настильность осколков лучше)
Соответственно если хотите наибольшую эффективность, забудьте от бомбежке с 5 м высоты. Иначе ставим 3-5 секунды ( как сейчас) и спокойно кидаем гладя цель брюхом.
Согласен, это уже десятое дело, но если вдруг такое получится простым способом - это будет плюс.
С другой стороны - при такой высоте (5-50м) будут ли в реале бомбы зарываться в грунт? Когда вертикальная скорость ниже горизонтальной

ZloyPetrushkO 09.02.2010 20:30

Цитата:

Сообщение от JGr124_boRada (Сообщение 45569)
Почему, поясню.
При задержке близкой к нулю осколочные будут наиболее эффективны ( не зарываются в грунт - соответственно настильность осколков лучше)
Соответственно если хотите наибольшую эффективность, забудьте от бомбежке с 5 м высоты. Иначе ставим 3-5 секунды ( как сейчас) и спокойно кидаем гладя цель брюхом.
Согласен, это уже десятое дело, но если вдруг такое получится простым способом - это будет плюс.
С другой стороны - при такой высоте (5-50м) будут ли в реале бомбы зарываться в грунт? Когда вертикальная скорость ниже горизонтальной

я согласен что такое явление может иметь место быть.

но н едумаю что ето получиться просто. поясню: т.к. бомба и взрыв находятся в разных классах(а мб и в разных ветках) нужно будет налаживать передачу параметра bombdelay

оно того не стоит...
другой вопрос, что мб там уже передаеться bombdelay - то можно. хуже не будет :)


Текущее время: 23:39. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot