Атрибути для обчислення влучення в гру по черзі або Roguelikes


22

Я намагаюся розібратися з хорошою формулою для визначення удару, коли гравець атакує ворога в Roguelike. Я хотів би придумати щось спрощене, але все-таки вірне тому, як це робиться в науково-дослідних розробках або популярних Roguelikes, таких як AngBand або NetHack.

Досі я додаю відмінності між атрибутами гравця та противника, а також випадковим цілим числом:

if ((player.dex - enemy.dex) + (player.speed - enemy.speed) +
    (player.luck - enemy.luck) + random_integer_below_6()) >= 10) {
    hit(enemy);
}

Це спричиняє неприродний геймплей: гравець ніколи не пропускає слабких ворогів і навпаки сильних. Хтось знає про посібник з атрибуції бою, який використовується в іграх по черзі тощо? Чи повинен я (і чи можу я) копіювати правила дослідницької та дослідної роботи дослівно?

Відповіді:


18

Я б зрозумів, які ви хочете мати шанси на "гарантований удар" та "гарантовану суму" (тобто шанси кошеня вдарити дракона, а дракон пропустити кошеня). Зберігайте свій випадковий результат і перед тим, як застосовувати різницю потужності, позначте хіт, якщо він знаходиться в цих межах. Це запобіжить проблему шансів на 100% потрапляння / пропуску ... хоча є інший варіант завжди надавати шанс потрапити, детально описаний нижче.

D&D - це "плоска" система, де ймовірність рівномірно розподіляється за можливими результатами згортання. Інші системи використовують більш вигнутий розподіл, як правило, досягається шляхом прокатки декількох кісток і додавання їх. Досить просто створити подібну криву (приходить на думку rand () + rand ()) / 2).

Інша можливість - "вибух кісток". У таких системах, як Shadowrun та Savage Worlds, прокручування максимально можливого результату загибелі дозволяє перемотати, що гине, та додати новий результат. У грі ви спробуєте перевірити, чи був ваш випадковий результат вище певного порогу, і якщо так, скочіть знову. Якщо ви дозволяєте кубикам вибухати нескінченно, то навіть найнижчий гоблін має шанс вдарити бога, і вам не потрібен явний механік із гарантованим ударом.

Отож, один із можливих підходів із зігнутим рулоном, гарантованим шансом пропасти та вибухнутими кістками буде чимось таким:

function getRoll():Number
{
  var result:Number = (rand() + rand()) * 3; //Curved result from 0 to 6
  if(result > 5.75) result += getRoll(); //Explode over a certain threshold, recursively
  return result;
}

function attackHits():Boolean
{
  var roll:Number = getRoll();
  if(roll < 0.25) return false; //Guaranteed chance of miss
  else return ((player.dex - enemy.dex) + (player.speed - enemy.speed) +
    (player.luck - enemy.luck) + roll) >= 10; //Your original test.
}

Звичайно, це неперевірено і неврівноважено; Ви хочете скорегувати всі ці магічні числа, поки вони не відчували себе правильно.

Що стосується дословного копіювання правил, то з цим є правові та етичні проблеми. Ти чудово тягнеш натхнення від D&D та інших настільних ігор; саме так усі вони розробили в першу чергу. Вам також не потрібно показувати гравцеві, як саме працюють правила, і ви можете виявити, що використання плавної кривої кістки з плаваючою комою призводить до кращого почуття, ніж обмеження себе цілими обмеженнями фізичних кісток.


3
що це за мова, із смішним типом decls? Або це просто псевдокод?
tenpn

2
Я думаю, що це може бути Actioncript або Javascript, але не дотримуйтесь мене до цього.
Качка комуністична

Це Actionscript 3. Я розробник Flash.
Григорій Ейвери-Вейр

6

Я припускаю, що це питання балансу гри, а не питання кодування, і існує маса способів вирішити це. З вашого існуючого алгоритму, я підозрюю, що ви ускладнюєте його, ніж це має бути (три атрибути І випадкове число створюють надзвичайно каламутну систему з точки зору гравця). Мій перший інстинкт - спростити!

Атрибути вибору, які роблять кілька речей, а не результати, що визначаються кількома атрибутами. DEX працює чудово як основний визначальний шанс потрапити в удар; додавання всього іншого служить лише для того, щоб зробити його складніше балансувати. Подумайте про це так: очікуваний збиток гравця при кожному ударі - це їхній відсотковий збиток, помножений на їх середній збиток під час удару. Як ви плануєте обчислити "очікуваний" або "типовий", щоб потрапити на% із такою кількістю змінних?

Я бачу ще одне питання - це те, що ваша формула не змінює масштаб, і це, мабуть, те, що ви відчуваєте. Якщо припустити, що DEX, LUCK та SPEED мають тенденцію до збільшення протягом гри, відмінності між гравцем та монстром у цих статистичних даних також будуть збільшуватися. Як приклад, якщо DEX ранньої гри гравця перебуває в діапазоні від 4 до 6, а також монстри - це модифікатор 10-20% до ударів. Якщо діапазон більше схожий на 10-20 на наступних етапах гри, це до 100% модифікатора.

Один із способів виправити це - виправити статистику. Діапазон гравців та монстрів однаковий протягом усієї гри, і отримати щось на кшталт +1 DEX - це величезна справа, вкрай рідкісна, і її розглядають як таку (якщо вона взагалі існує). Тоді ваша формула буде чудово працювати протягом всієї гри, і ви побачите гравця з приблизно однаковим шансом на влучення протягом усієї гри.

Інший спосіб - змінити жорсткий код "10" на масштаб з рівнем, тому, можливо, це "10 + рівень монстра" або "10 + підземелля" або щось подібне, що спричиняє незначне збільшення труднощів, коли гра прогресує, якщо гравець не підвищиться відповідно до їх статистики.

Третій спосіб, як говорили інші, - встановити жорсткі обмеження на найвищий і найнижчий прийнятний для удару%, а просто сказати "якщо обчислене значення менше X, замість цього використовуйте X".

Для повноти я зазначу, що не існує абсолютного закону, згідно з яким Ви ОБОВ'ЯЗКОВО включаєте ролик, який потрапив би в першу чергу. Діяти в неефективній грі не особливо весело і не дуже додає досвіду, за винятком рідкісних випадків. Альтернатива полягає в тому, щоб дозволити гравцям ВИНАГИ вдарятися і просто возитися з діапазоном ушкоджень, щоб іноді вони завдали набагато меншої шкоди, ніж інші. Пам'ятайте, що складні системи для дизайнера цікавіші, ніж плеєр.


Це чудова відповідь.
seanicus

3

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


0

Багато ігор використовують п’ятивідсоткову зміну удару незалежно від усіх факторів на додаток до звичайної формули попадання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.