A.I.M. Jagged Alliance2

Добро пожаловать, Гость. Пожалуйста, выберите:
Вход || Регистрация.
19.11.2017 в 02:33:14

Главная Главная Помощь Помощь Поиск Поиск Участники Участники Вход Вход Регистрация Регистрация
A.I.M. « Наука и религия в исходниках НО. »
Тут обсуждают, что Терапевт должен сделать, чтобы мне было хорошо.

   A.I.M.
   Обсуждаем игры
   Night Ops
(Модераторы: maks_tm, ПМ, Терапевт)
   Наука и религия в исходниках НО.
« Предыдущая Тема | Следующая Тема »
  Тема:  Наука и религия в исходниках НО.             Страниц: 1 2 3 4 5 Прочитано 20745 раз
Dirk_Diggler
[Дерзкий шахтёр]
Мигель

ы




Репутация: +48
Re: Наука и религия в исходниках НО.
« Ответ #200 от 17.11.2010 в 19:43:57 »

17.11.2010 в 19:33:03, MAn писал(a):
Багмонстр грит, что быдто 40 или 60%  

Там большая и толстая процедура определения шанса, зависит от расстояния и т.п.
 
А вот если мы туда и целились - то все 100%
 
Code:
uiChanceOfHit = ChanceOfBulletHittingStructure( pBullet->iLoop, pBullet->iDistanceLimit, pBullet->sHitBy );
 
 if (iGridNo == (INT32) pBullet->sTargetGridNo)
  {
   fIntended = TRUE;
   // if in the same tile as our destination, we WANT to hit the structure!
   if ( fIntended )
   {
    uiChanceOfHit = 100;
   }

 
а потом вот так добавляем в структуры:  
 
Code:
     if ( PreRandom( 100 ) < uiChanceOfHit )
      {
       gpLocalStructure[iNumLocalStructures] = pStructure;
       gubLocalStructureNumTimesHit[iNumLocalStructures] = 0;
       iNumLocalStructures++;
      }
Зарегистрирован

Dirk_Diggler
[Дерзкий шахтёр]
Мигель

ы




Репутация: +48
Re: Наука и религия в исходниках НО.
« Ответ #201 от 17.11.2010 в 19:50:21 »

А bugmonster-то прав... В принципе, в LOS.c есть всё, чтобы поменять модель стрельбы...
Зарегистрирован

MAn
[Человечище!!!]







Пол:
Репутация: +403
Re: Наука и религия в исходниках НО.
« Ответ #202 от 17.11.2010 в 19:53:04 »

17.11.2010 в 19:38:03, Dirk_Diggler писал(a):
Обратить внимание на ddMinimumMiss и его использование.

Гм, ну я не силён в английском, но мне кажется, что там написано:
 17.11.2010 в 19:38:03, Dirk_Diggler писал(a):
Want to make sure that not too many misses actually hit the target after all              // to miss a target at 1 tile is about 30 degrees off, at 5 tiles, 6 degrees off              // at 15 tiles, 2 degrees off.  Thus 30 degrees divided by the # of tiles distance.   

Хотим, мол, чтобы не слишком часто "промахи" попадали в цель.
Для этого вводится ограничение по отклонению, то бишь пуля отклонившаяся на некоторый градус = 30/колво тайлов  не поражает цель, даже если и проходит через неё.
Зарегистрирован

Dirk_Diggler
[Дерзкий шахтёр]
Мигель

ы




Репутация: +48
Re: Наука и религия в исходниках НО.
« Ответ #203 от 17.11.2010 в 20:00:31 »

17.11.2010 в 19:53:04, MAn писал(a):

Хотим, мол, чтобы не слишком часто "промахи" попадали в цель.  

ddAmountOfMiss = ( (ddMaximumMiss - ddMinimumMiss) * (DOUBLE) iMissedBy) / 100.0 + ddMinimumMiss;  
 
Т.е. ddAmountOfMiss  не может быть меньше этого ddMinimumMiss. А мы потом углы на этот ddAmountOfMiss правим. Т.е ограничение конусом  "изнутри" есть. Вопрос в том, это именно строгий конус, или просто уменьшение вероятности - не так важно, лень формулу разбирать. В любом случае, если угол слишком точный - он дополнительно отклоняется.
Зарегистрирован

MAn
[Человечище!!!]







Пол:
Репутация: +403
Re: Наука и религия в исходниках НО.
« Ответ #204 от 17.11.2010 в 20:11:46 »

17.11.2010 в 20:00:31, Dirk_Diggler писал(a):
не так важно, лень формулу разбирать. В любом случае, если угол слишком точный - он дополнительно отклоняется.

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

valuta
Мистер ЭЧ

Я люблю этот Форум!




Пол:
Репутация: ---
Re: Наука и религия в исходниках НО.
« Ответ #205 от 04.03.2012 в 21:42:21 »

Всем привет! Я новенький, ногами не бейте, плиз.
В исходниках шанс попадания = (меткость + кондиция оружия) / 2.  
Видимо в оригинале Джа 2 так же.
Значит:
 1)неандерталец, найдя ствол 100% исправный, попадет в цель фифти-фифти
 2)профи с меткостью 100 из ствола нулевой кондиции тоже фифти-фифти.
Без учета штрафов и бонусов ессно.
IMHO надо брать корень произведения  sqrt( меткость*кондиция).
« Изменён в : 04.03.2012 в 21:54:36 пользователем: valuta » Зарегистрирован

coolberg
[Ядрён Батон!]
Прирожденный Джаец






Пол:
Репутация: +138
Re: Наука и религия в исходниках НО.
« Ответ #206 от 05.03.2012 в 01:10:15 »

2valuta: насколько я помню, среднее арифметическое бралось только в том случае, когда кондиция оружия меньше меткости стрелка, в остальных случаях за базовый шанс бралась просто меткость. Поэтому для неандертальца шанс так и будет ноль, если я ничего не путаю.
Зарегистрирован

valuta
Мистер ЭЧ

Я люблю этот Форум!




Пол:
Репутация: ---
Re: Наука и религия в исходниках НО.
« Ответ #207 от 05.03.2012 в 05:40:10 »

2coolberg: Да нет, еще раз глянул, именно среднеарифметическое. Неандерталец очень опасен.
Зарегистрирован

valuta
Мистер ЭЧ

Я люблю этот Форум!




Пол:
Репутация: ---
Re: Наука и религия в исходниках НО.
« Ответ #208 от 08.03.2012 в 04:31:19 »

2coolberg: Однако вы сударь правы.
Тем не менее среднеарифметическое не есть гуд. Это величины вероятностные, соотв. надо перемножать/делить, а не складывать/пополамить.
Зарегистрирован

Bonarienz
[Попокатепетль]


Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!




Репутация: +319
Re: Наука и религия в исходниках НО.
« Ответ #209 от 08.03.2012 в 07:37:02 »

2valuta:  
 
"Сударь" - уничижит. или шутлив.-иронич. сокращение от "Милостивый государь". В общении с незнакомыми или малознакомыми - недопустимо. (Для свед. - Множ. числа не имеет.)
 
Как на счет приближения функции вероятности эллиптическими?  
 
Это ведь не просто суммы, но суммы с условиями - т.е. кус.-лин. аппроксимация заметно более сложных непрерывных зависимостей. А вот "куркулируются" такие зависимости заметно быстрее (на порядки быстрее) функциональных зависимостей. Банан по выч. мат... Фтопку идеи!
 
Ведь игре при просчете этихпля функций надо еще анимации крутить...
Зарегистрирован

Deleatur (лат.) - Стереть все, совсем все!
valuta
Мистер ЭЧ

Я люблю этот Форум!




Пол:
Репутация: ---
Re: Наука и религия в исходниках НО.
« Ответ #210 от 08.03.2012 в 09:22:14 »

2Bonarienz:  
 
О как !?!? : rolleyes : Бум знать.
 
Может быть и так. Разница в расчетах будет существенна, лишь случаях использования практически неисправного ствола. Чего в игре не бывает.
Можно забить.
Зарегистрирован

Seven
[Голос Америки]

Псих






Репутация: +212
Re: Наука и религия в исходниках НО.
« Ответ #211 от 26.05.2016 в 16:00:44 »

Нашел только эту тему про исходники.
Вопрос специалистам, вот есть в НО 1.2 такой код:
 
Quote:
SOLDIERCLASS * FindSoldierByProfileID( UINT8 ubProfileID, BOOLEAN fPlayerMercsOnly )
{
 UINT8 ubLoop, ubLoopLimit;
 SOLDIERCLASS * pSoldier;
 
 if (fPlayerMercsOnly)
 {
  ubLoopLimit = gTacticalStatus.Team[0].bLastID;
 }
 else
 {
  ubLoopLimit = MAX_NUM_SOLDIERS;
 }
 
 for (ubLoop = 0, pSoldier = MercPtrs[0]; ubLoop < ubLoopLimit; ubLoop++, pSoldier++)
 {
  if (pSoldier->bActive && pSoldier->ubProfile == ubProfileID)
  {
   return( pSoldier );
  }
 }
 return( NULL );
}

 
bLastID = это максимальный возможный ID для команды (то есть, солдат с таким ID может реально существовать).
MAX_NUM_SOLDIERS - это значение, на 1 больше максимально возможного ID солдата в игре (для команды цивилов последний ID равен MAX_NUM_SOLDIERS - 1).
 
В итоге, цикл, проверяющий ubLoop < ubLoopLimit будет корректно работать для всех случаев, кроме случая, когда ищется последний ID для команды игрока.
Зарегистрирован

Ja2 1.13 v7609 Сборки+Моды
Ja2 1.13 youtube channel

Терапевт
[Кулибин]
Кардинал


Народный целитель. Шарлатан высшей категории.




Пол:
Репутация: +1162
Re: Наука и религия в исходниках НО.
« Ответ #212 от 31.05.2016 в 14:42:29 »

2Seven:  
Данная историческая ошибка теоретически чревата лишь какими-то глюками с транспортом игрока при наличии сразу двух машин. Например, NPC не сможет заправить вторую машину, если есть квест с такой реакцией. Причём она такая не единственная, есть ещё.
Зарегистрирован

Смерть стоит того, чтобы жить.
А любовь стоит того, чтобы ждать. (С) В.Цой

Seven
[Голос Америки]

Псих






Репутация: +212
Re: Наука и религия в исходниках НО.
« Ответ #213 от 14.07.2017 в 20:44:24 »

Вопрос знатокам.
 
В функции UseGun есть такой вызов:
FireBulletGivenTarget( pSoldier, dTargetX, dTargetY, dTargetZ, pSoldier->usAttackingWeapon, (UINT16) (uiHitChance - uiDiceRoll), fBuckshot, FALSE );
При этом FireBulletGivenTarget определена в LOS.h как  
INT8 FireBulletGivenTarget( SOLDIERCLASS * pFirer, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, UINT16 usHandItem, INT16 sHitBy, BOOLEAN fBuckshot, BOOLEAN fFake );
Для чего (uiHitChance - uiDiceRoll) преобразуется в UINT16, если передавать нужно INT16, причем отрицательное значение имеет смысл и означает величину промаха?
 
Например, вызов CalculateLaunchItemParamsForThrow в UseThrown производится корректно, с преобразованием в INT8:
 
CalculateLaunchItemParamsForThrow( pSoldier, sTargetGridNo, pSoldier->bTargetLevel, (INT16)(pSoldier->bTargetLevel * 256 ), &(pSoldier->inv[ HANDPOS ] ), (INT8)(uiDiceRoll - uiHitChance), THROW_ARM_ITEM, 0 );
« Изменён в : 14.07.2017 в 21:06:00 пользователем: Seven » Зарегистрирован

Ja2 1.13 v7609 Сборки+Моды
Ja2 1.13 youtube channel

Терапевт
[Кулибин]
Кардинал


Народный целитель. Шарлатан высшей категории.




Пол:
Репутация: +1162
Re: Наука и религия в исходниках НО.
« Ответ #214 от 21.07.2017 в 15:34:42 »

14.07.2017 в 20:44:24, Seven писал(a):
Для чего (uiHitChance - uiDiceRoll) преобразуется в UINT16, если передавать нужно INT16, причем отрицательное значение имеет смысл и означает величину промаха?

Хотя по логическому смыслу это неправильно, но в данном случае не имеет значения к знаковому или беззнаковому типу происходит преобразование, главное, что к двухбайтовому, подходящему по размеру. Целое отрицательное число хранится, как положительное больше 32767. Например, -1 будет храниться, как 65535; -2, как 65534 и т.п. Таким образом знак числа при передаче в функцию не теряется, и все вычисления внутри выполняются корректно.
Зарегистрирован

Смерть стоит того, чтобы жить.
А любовь стоит того, чтобы ждать. (С) В.Цой

Seven
[Голос Америки]

Псих






Репутация: +212
Re: Наука и религия в исходниках НО.
« Ответ #215 от 21.07.2017 в 21:54:13 »

2Терапевт:  
А вот еще из исходников НО 1.2:
В UseGun():
Вычисляем шанс попасть:
Quote:
uiHitChance = CalcChanceToHitGun( pSoldier, sTargetGridNo, pSoldier->bAimTime, pSoldier->bAimShotLocation );

Затем случайное число:
Quote:
// ROLL DICE
uiDiceRoll = PreRandom( 100 );

Если uiDiceRoll <= uiHitChance, то это попадание, то есть пуля полетит точно в цель.
Quote:
fGonnaHit = uiDiceRoll <= uiHitChance;

и передается в FireBulletGivenTarget(  как sHitBy параметр:
Quote:
FireBulletGivenTarget( pSoldier, dTargetX, dTargetY, dTargetZ, pSoldier->usAttackingWeapon, (UINT16) (uiHitChance - uiDiceRoll), fBuckshot, FALSE );

Если sHitBy >=0, то это попадание.
Получается, что при вычисленном шансе попасть uiHitChance = 0, есть 1% вероятность реального попадания (uiDiceRoll = 0, 0<=0).
При вычисленном шансе uiHitChance = 1%, реальный шанс попасть будет 2% (0<=1, 1<=1).
 
Ванильный баг в AI функции SearchForItems:
Quote:
case ARMOURCLASS_VEST:
 if (pSoldier->inv[VESTPOS].usItem == NOTHING)
 {
  iTempValue = 200 + EffectiveArmour( pObj );
 }
 else if ( EffectiveArmour( &(pSoldier->inv[HELMETPOS]) ) > EffectiveArmour( pObj ) )
 {
  iTempValue = 100 * EffectiveArmour( pObj ) / EffectiveArmour( &(pSoldier->inv[VESTPOS]) );
 }
 else
 {
  iTempValue = 0;
 }
 break;

Проверяем жилетку, а сравниваем броню поднимаемого объекта с броней шапки:
Quote:
else if ( EffectiveArmour( &(pSoldier->inv[HELMETPOS]) ) > EffectiveArmour( pObj ) )

Аналогично и со штанами.
Кроме того, EffectiveArmour() при определенных условиях может вернуть 0, что приведет к предсказуемым последствиям:
Quote:
INT8 EffectiveArmour( OBJECTTYPE * pObj )
{
 INT32  iValue;
 INT8  bPlate;
 
 if (pObj == NULL || Item[pObj->usItem].usItemClass != IC_ARMOUR)
 {
  return( 0 );
 }
...
}
Зарегистрирован

Ja2 1.13 v7609 Сборки+Моды
Ja2 1.13 youtube channel

Терапевт
[Кулибин]
Кардинал


Народный целитель. Шарлатан высшей категории.




Пол:
Репутация: +1162
Re: Наука и религия в исходниках НО.
« Ответ #216 от 22.07.2017 в 00:12:43 »

21.07.2017 в 21:54:13, Seven писал(a):
Ванильный баг в AI функции SearchForItems:

В НО боты не ищут броню. Ищут только оружие и патроны.
Зарегистрирован

Смерть стоит того, чтобы жить.
А любовь стоит того, чтобы ждать. (С) В.Цой

Bonarienz
[Попокатепетль]


Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!




Репутация: +319
Re: Наука и религия в исходниках НО.
« Ответ #217 от 22.07.2017 в 01:52:33 »

2Терапевт:  
 
Как же так? С Барреттом и голой жопой - впирёт на фрагА?!. Нипарядык!
Зарегистрирован

Deleatur (лат.) - Стереть все, совсем все!
Seven
[Голос Америки]

Псих






Репутация: +212
Re: Наука и религия в исходниках НО.
« Ответ #218 от 30.08.2017 в 10:52:53 »

В CreatureDecideActionBlack()
Quote:
// DIGGLER ON   21.11.2010  
// Теперь у нас 2 процедуры на каждый случай жизни
#ifdef NEW_AI_STRUCT
 if ( gfTurnBasedAI || (gTacticalStatus.uiFlags & TURNBASED) )
  return(DecideActionRedTB(pSoldier,FALSE));
 else  
  return(DecideActionRedRT(pSoldier,FALSE));
#else
return(DecideActionRed(pSoldier,FALSE));
#endif
// DIGGLER OFF

Разве тут не должно вызываться CreatureDecideActionRed?
Зарегистрирован

Ja2 1.13 v7609 Сборки+Моды
Ja2 1.13 youtube channel

Терапевт
[Кулибин]
Кардинал


Народный целитель. Шарлатан высшей категории.




Пол:
Репутация: +1162
Re: Наука и религия в исходниках НО.
« Ответ #219 от 30.08.2017 в 23:27:28 »

Наверно да, но с оригинала идёт именно так.
Зарегистрирован

Смерть стоит того, чтобы жить.
А любовь стоит того, чтобы ждать. (С) В.Цой

Seven
[Голос Америки]

Псих






Репутация: +212
Re: Наука и религия в исходниках НО.
« Ответ #220 от 30.08.2017 в 23:34:14 »

2Терапевт:  
Судя по всему, это просто неудачная копипаста из DecideAction.c - там есть ровно такой же код - если единственный доступный для атаки противник умирает, ищем нормального и если находим, будем через Red AI к нему добираться, так как в Black AI нет поиска противника. То есть скопировать скопировали, а имя функции поменять забыли.
Зарегистрирован

Ja2 1.13 v7609 Сборки+Моды
Ja2 1.13 youtube channel

Страниц: 1 2 3 4 5  Послать Тему Послать Тему Печатать Печатать

« Предыдущая Тема | Следующая Тема »

Статистика. Размер данных: 70409 GZip: off
A.I.M. » Powered by YaBB Modification 4 (v.4.0.0-pre)!
YaBB © 2000-2003. All Rights Reserved.