AviaSkins.Forums

Вернуться   AviaSkins.Forums > Основные разделы > Моды для Ил-2 > Баллада об оружии

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.02.2010, 12:23   #281
ZloyPetrushkO
Местный
 
Регистрация: 31.05.2008
Сообщений: 1,159
По умолчанию

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

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

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

Цитата:
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 Посмотреть сообщение
Во-первых, большинство из дискутирующих (включая меня) в модостроении и в программировании на яве - не совсем "коппенгагены" Поэтому обращаться с этим придется уже к тем, кто умеет.
ну почему? если только лишь правка приведенных выше параметров- ради такого мода готов предоставить необходимый пакет технологий
данные о бомбах нужны?


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

Цитата:
Сообщение от 23AG_Black Посмотреть сообщение

Основная проблема с игрой - в расчет на поражение передается какая-то усредненная энергия, завязанная на мощность (параметр бомбы) и радиус (тоже параметр бомбы). Если применять реальные расчеты - этих параметров должно быть 2 (от осколочного и фугасного поражения). Либо попытаться эмпирически подогнать эти параметры к полученным по формулам. Т.е. либо мы приводим эти расчеты к той же суммарной энергии (как есть сейчас в игре), либо переделываем всю наземку (и скорее всего зданий), указывая минимум 2 таблицы для вероятностей поражения.
мое имхо- 1 путь. у нас таки моделлирование, и главное преимущество 1 пути- то что он релализуем
ZloyPetrushkO вне форума   Ответить с цитированием
Старый 09.02.2010, 13:35   #282
SLON
Местный
 
Аватар для SLON
 
Регистрация: 29.11.2009
Сообщений: 649
По умолчанию

Цитата:
Сообщение от ZloyPetrushkO Посмотреть сообщение
собсна вопрос, правильно ли я понимаю, что для реализации мода правки етих параметров хватит?
а оно сильно влияет?
не совсем, необходимо будет вводить еще несколько констант
SLON вне форума   Ответить с цитированием
Старый 09.02.2010, 14:27   #283
SG2_Wasy
Звуковых дел мастер
 
Аватар для SG2_Wasy
 
Регистрация: 07.08.2007
Сообщений: 523
Отправить сообщение для SG2_Wasy с помощью ICQ
По умолчанию

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

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

P.S. Трудно картинку в джепег пережать?
__________________
Апдейты на мод можно проверить здесь
http://www.mediafire.com/?sharekey=3...129846a9fea912

Последний раз редактировалось SG2_Wasy; 09.02.2010 в 14:37.
SG2_Wasy вне форума   Ответить с цитированием
Старый 09.02.2010, 14:40   #284
JGr124_boRada
Местный
 
Регистрация: 19.02.2009
Сообщений: 450
По умолчанию

Цитата:
Сообщение от ZloyPetrushkO Посмотреть сообщение
типовые данные о бомбе:

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

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

Последний раз редактировалось JGr124_boRada; 09.02.2010 в 14:46.
JGr124_boRada вне форума   Ответить с цитированием
Старый 09.02.2010, 14:47   #285
SG2_Wasy
Звуковых дел мастер
 
Аватар для SG2_Wasy
 
Регистрация: 07.08.2007
Сообщений: 523
Отправить сообщение для SG2_Wasy с помощью ICQ
По умолчанию

Цитата:
Сообщение от JGr124_boRada Посмотреть сообщение
Посмотри пожалуйста как и где применяется powerType
именно этот параметр и отвечает за тип бомбы, насколько я помню.
Имхо, ни за что большое чем внешний эффект он не отвечает.
Просто взрыв
Взрыв с долгим дымом (АЖ-2)
Взрыв с пламенем.
__________________
Апдейты на мод можно проверить здесь
http://www.mediafire.com/?sharekey=3...129846a9fea912
SG2_Wasy вне форума   Ответить с цитированием
Старый 09.02.2010, 14:48   #286
SLON
Местный
 
Аватар для SLON
 
Регистрация: 29.11.2009
Сообщений: 649
По умолчанию

Цитата:
Сообщение от SG2_Wasy Посмотреть сообщение
Ага, а помимо того чтобы ввести пару констант, нужно полностью изменять физ модель взрыва в игре... что мне кажется и сильно повлияет на воздействие ОФЗ на самолеты....
Мое имхо, проще отработать то что есть. Ебо мусолить формулы это одно, а практически реализовать - совершенно другое.
P.S. Трудно картинку в джепег пережать?
ФМ менять не нужно, я говорю о определении вероятности поражения, фугасным (суммарным удельным импульсом или избыточным давлением) или осколочным действием в зависимости от типа б/п.
SLON вне форума   Ответить с цитированием
Старый 09.02.2010, 14:51   #287
SG2_Wasy
Звуковых дел мастер
 
Аватар для SG2_Wasy
 
Регистрация: 07.08.2007
Сообщений: 523
Отправить сообщение для SG2_Wasy с помощью ICQ
По умолчанию

Цитата:
Сообщение от SLON Посмотреть сообщение
ФМ менять не нужно, я говорю о определении вероятности поражения, фугасным (суммарным удельным импульсом или избыточным давлением) и осколочным действием.
Нету это ничего в игре, НЕТУ.
__________________
Апдейты на мод можно проверить здесь
http://www.mediafire.com/?sharekey=3...129846a9fea912
SG2_Wasy вне форума   Ответить с цитированием
Старый 09.02.2010, 15:03   #288
JGr124_boRada
Местный
 
Регистрация: 19.02.2009
Сообщений: 450
По умолчанию

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

Последний раз редактировалось JGr124_boRada; 09.02.2010 в 15:08.
JGr124_boRada вне форума   Ответить с цитированием
Старый 09.02.2010, 15:08   #289
ZloyPetrushkO
Местный
 
Регистрация: 31.05.2008
Сообщений: 1,159
По умолчанию

Борада, а из каких классов ты ети формулы то выдрал?
про паур тайп гляну...
ZloyPetrushkO вне форума   Ответить с цитированием
Старый 09.02.2010, 15:08   #290
JGr124_boRada
Местный
 
Регистрация: 19.02.2009
Сообщений: 450
По умолчанию

Цитата:
Сообщение от ZloyPetrushkO Посмотреть сообщение
Борада, а из каких классов ты ети формулы то выдрал?
про паур тайп гляну...
Да у меня только цитаты с сухого. Классы незнаю.
JGr124_boRada вне форума   Ответить с цитированием
Старый 09.02.2010, 16:30   #291
ZloyPetrushkO
Местный
 
Регистрация: 31.05.2008
Сообщений: 1,159
По умолчанию

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

Код:
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:59.
ZloyPetrushkO вне форума   Ответить с цитированием
Старый 09.02.2010, 16:53   #292
ZloyPetrushkO
Местный
 
Регистрация: 31.05.2008
Сообщений: 1,159
По умолчанию

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

Последний раз редактировалось ZloyPetrushkO; 09.02.2010 в 16:57.
ZloyPetrushkO вне форума   Ответить с цитированием
Старый 09.02.2010, 17:21   #293
JGr124_boRada
Местный
 
Регистрация: 19.02.2009
Сообщений: 450
По умолчанию

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

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

Последний раз редактировалось JGr124_boRada; 09.02.2010 в 17:27.
JGr124_boRada вне форума   Ответить с цитированием
Старый 09.02.2010, 18:28   #294
ZloyPetrushkO
Местный
 
Регистрация: 31.05.2008
Сообщений: 1,159
По умолчанию

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


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

количество осколков:
Код:
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   #295
ZloyPetrushkO
Местный
 
Регистрация: 31.05.2008
Сообщений: 1,159
По умолчанию

итого...порядок причесывания имхо сводиться к такому.
1)знаем данные о реальных бомбах
2) вычисляем данные о эффекте РЕАЛЬНЫХ бомб
3) берем какую либо точку в зоне поражения, и сравниваем отношение эффекта от 2 бомб в реале. запоминаем ето отношение
4) берем данные о игровых бомбах, по формулам считаем дамаг для какогонибудь случая. например для авто. далее берем отношение етих дамагов в точке для двух бомб
5) сравнениваем отношение дамагов к отношению эффективности
6) если большое различие- правим игровые исходные данные, что различие уменьшилось. вот так
мое имхо
ZloyPetrushkO вне форума   Ответить с цитированием
Старый 09.02.2010, 19:18   #296
JGr124_boRada
Местный
 
Регистрация: 19.02.2009
Сообщений: 450
По умолчанию

Чудненько! Спасибо за перевод! Думаем....
Цитата:
Сообщение от ZloyPetrushkO Посмотреть сообщение
итого...порядок причесывания имхо сводиться к такому.
1)знаем данные о реальных бомбах
2) вычисляем данные о эффекте РЕАЛЬНЫХ бомб
3) берем какую либо точку в зоне поражения, и сравниваем отношение эффекта от 2 бомб в реале. запоминаем ето отношение
4) берем данные о игровых бомбах, по формулам считаем дамаг для какогонибудь случая. например для авто. далее берем отношение етих дамагов в точке для двух бомб
5) сравнениваем отношение дамагов к отношению эффективности
6) если большое различие- правим игровые исходные данные, что различие уменьшилось. вот так
мое имхо
Именно!
JGr124_boRada вне форума   Ответить с цитированием
Старый 09.02.2010, 19:57   #297
JGr124_boRada
Местный
 
Регистрация: 19.02.2009
Сообщений: 450
По умолчанию

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

Последний раз редактировалось JGr124_boRada; 09.02.2010 в 20:01.
JGr124_boRada вне форума   Ответить с цитированием
Старый 09.02.2010, 20:10   #298
ZloyPetrushkO
Местный
 
Регистрация: 31.05.2008
Сообщений: 1,159
По умолчанию

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

Цитата:
Сообщение от JGr124_boRada Посмотреть сообщение
Единственно, есть одна хотелка - внести небольшую зависимость от задержки взрывателя ( а может уже и есть?)
по моему это лишнее мое имхо.
ZloyPetrushkO вне форума   Ответить с цитированием
Старый 09.02.2010, 20:22   #299
JGr124_boRada
Местный
 
Регистрация: 19.02.2009
Сообщений: 450
По умолчанию

Цитата:
Сообщение от ZloyPetrushkO Посмотреть сообщение
туда передается масса

по моему это лишнее мое имхо.
Почему, поясню.
При задержке близкой к нулю осколочные будут наиболее эффективны ( не зарываются в грунт - соответственно настильность осколков лучше)
Соответственно если хотите наибольшую эффективность, забудьте от бомбежке с 5 м высоты. Иначе ставим 3-5 секунды ( как сейчас) и спокойно кидаем гладя цель брюхом.
Согласен, это уже десятое дело, но если вдруг такое получится простым способом - это будет плюс.
С другой стороны - при такой высоте (5-50м) будут ли в реале бомбы зарываться в грунт? Когда вертикальная скорость ниже горизонтальной
JGr124_boRada вне форума   Ответить с цитированием
Старый 09.02.2010, 20:30   #300
ZloyPetrushkO
Местный
 
Регистрация: 31.05.2008
Сообщений: 1,159
По умолчанию

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

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

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


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Рейтинг@Mail.ru