Я разрабатываю классическую 2d RPG (в духе финальной фантазии), и мне было интересно, есть ли у кого-нибудь совет о том, как сделать формулы ущерба / ссылки на ресурсы / примеры? Я объясню мою текущую настройку. Надеюсь, я не переусердствую с этим вопросом, и я прошу прощения, если мои вопросы слишком большие / широкие
Статистика моих персонажей состоит из следующих элементов:
enum Stat
{
HP = 0,
MP = 1,
SP = 2,
Strength = 3,
Vitality = 4,
Magic = 5,
Spirit = 6,
Skill = 7,
Speed = 8, //Speed/Agility are the same thing
Agility = 8,
Evasion = 9,
MgEvasion = 10,
Accuracy = 11,
Luck = 12,
};
Живучесть - это в основном защита от физических атак, а дух - защита от магических атак.
Все характеристики имеют фиксированные максимумы (9999 для HP, 999 для MP / SP и 255 для остальных). С помощью способностей максимальные значения могут быть увеличены (99999 для HP, 9999 для HP / SP, 999 для остальных) с типичными значениями (на уровне 100) до / после способностей + экипировка + и т. Д. Будут 8000/20000 для HP, 800 / 2000 для SP / MP, 180/350 для других характеристик
В конце игры Enemy HP, как правило, будут в нижних миллионах (с супер боссом, имеющим максимум ~ 12 миллионов).
Мне было интересно, как люди действительно разрабатывают правильные формулы ущерба, которые правильно масштабируются? Например, основываясь на этих данных, использование формул повреждений для Final Fantasy X в качестве основы выглядело очень многообещающе. Полная ссылка здесь http://www.gamefaqs.com/ps2/197344-final-fantasy-x/faqs/31381, но в качестве быстрого примера: Str = 127, команда «Атака» используется, вражеская защита = 34.
1. Physical Damage Calculation:
Step 1 ------------------------------------- [{(Stat^3 ÷ 32) + 32} x DmCon ÷16]
Step 2 ---------------------------------------- [{(127^3 ÷ 32) + 32} x 16 ÷ 16]
Step 3 -------------------------------------- [{(2048383 ÷ 32) + 32} x 16 ÷ 16]
Step 4 --------------------------------------------------- [{(64011) + 32} x 1]
Step 5 -------------------------------------------------------- [{(64043 x 1)}]
Step 6 ---------------------------------------------------- Base Damage = 64043
Step 7 ----------------------------------------- [{(Def - 280.4)^2} ÷ 110] + 16
Step 8 ------------------------------------------ [{(34 - 280.4)^2} ÷ 110] + 16
Step 9 ------------------------------------------------- [(-246)^2) ÷ 110] + 16
Step 10 ---------------------------------------------------- [60516 ÷ 110] + 16
Step 11 ------------------------------------------------------------ [550] + 16
Step 12 ---------------------------------------------------------- DefNum = 566
Step 13 ---------------------------------------------- [BaseDmg * DefNum ÷ 730]
Step 14 --------------------------------------------------- [64043 * 566 ÷ 730]
Step 15 ------------------------------------------------------ [36248338 ÷ 730]
Step 16 ------------------------------------------------- Base Damage 2 = 49655
Step 17 ------------ Base Damage 2 * {730 - (Def * 51 - Def^2 ÷ 11) ÷ 10} ÷ 730
Step 18 ---------------------- 49655 * {730 - (34 * 51 - 34^2 ÷ 11) ÷ 10} ÷ 730
Step 19 ------------------------- 49655 * {730 - (1734 - 1156 ÷ 11) ÷ 10} ÷ 730
Step 20 ------------------------------- 49655 * {730 - (1734 - 105) ÷ 10} ÷ 730
Step 21 ------------------------------------- 49655 * {730 - (1629) ÷ 10} ÷ 730
Step 22 --------------------------------------------- 49655 * {730 - 162} ÷ 730
Step 23 ----------------------------------------------------- 49655 * 568 ÷ 730
Step 24 -------------------------------------------------- Final Damage = 38635
Я просто изменил разделители, чтобы включить рейтинг атаки оружия и рейтинг брони брони.
Магический урон рассчитывается следующим образом: Mag = 255, используется Ultima, MDef врага = 1
Step 1 ----------------------------------- [DmCon * ([Stat^2 ÷ 6] + DmCon) ÷ 4]
Step 2 ------------------------------------------ [70 * ([255^2 ÷ 6] + 70) ÷ 4]
Step 3 ------------------------------------------ [70 * ([65025 ÷ 6] + 70) ÷ 4]
Step 4 ------------------------------------------------ [70 * (10837 + 70) ÷ 4]
Step 5 ----------------------------------------------------- [70 * (10907) ÷ 4]
Step 6 ------------------------------------ Base Damage = 190872 [cut to 99999]
Step 7 ---------------------------------------- [{(MDef - 280.4)^2} ÷ 110] + 16
Step 8 ------------------------------------------- [{(1 - 280.4)^2} ÷ 110] + 16
Step 9 ---------------------------------------------- [{(-279.4)^2} ÷ 110] + 16
Step 10 -------------------------------------------------- [(78064) ÷ 110] + 16
Step 11 ------------------------------------------------------------ [709] + 16
Step 12 --------------------------------------------------------- MDefNum = 725
Step 13 --------------------------------------------- [BaseDmg * MDefNum ÷ 730]
Step 14 --------------------------------------------------- [99999 * 725 ÷ 730]
Step 15 ------------------------------------------------- Base Damage 2 = 99314
Step 16 ---------- Base Damage 2 * {730 - (MDef * 51 - MDef^2 ÷ 11) ÷ 10} ÷ 730
Step 17 ------------------------ 99314 * {730 - (1 * 51 - 1^2 ÷ 11) ÷ 10} ÷ 730
Step 18 ------------------------------ 99314 * {730 - (51 - 1 ÷ 11) ÷ 10} ÷ 730
Step 19 --------------------------------------- 99314 * {730 - (49) ÷ 10} ÷ 730
Step 20 ----------------------------------------------------- 99314 * 725 ÷ 730
Step 21 -------------------------------------------------- Final Damage = 98633
Проблема в том, что формулы полностью распадаются, когда статистика начинает превышать 255. В частности, значения Защиты свыше 300 или около того начинают генерировать действительно странное поведение. Например, высокая прочность + защита приводят к огромным отрицательным значениям. Хотя я мог бы изменить формулы для правильной работы для моего варианта использования, вероятно, было бы проще использовать совершенно новую формулу. Как люди на самом деле разрабатывают формулы ущерба? Я подумывал об открытии Excel и попытался построить формулу таким образом (например, отображение статистики атаки или статистики защиты), но мне было интересно, есть ли более простой способ? Хотя я не могу передать всю игровую механику своей игры, может ли кто-нибудь предложить хорошее начальное место для построения формулы урона?
Спасибо