Написано в начале:
Автор прочитал четыре книги, связанные с числовыми аспектами игр: «Справочник по игровым числам», «Контролёры баланса», «Дизайн игровых чисел» и «Руководство по планированию игровых проектов». Также изучил множество статей на различных онлайн-платформах, связанных с игровыми числами. Обнаружил, что шаги построения таблиц и методы расчёта значительно различаются в разных компаниях и среди различных планировщиков. Причина этих различий заключается в отсутствии унифицированной числовой модели: каждый использует свою привычную модель и методы построения таблиц, что не очень удобно для новичков, только начинающих работать с игровыми числами (например, как я).
Однако, после многочисленных чтений становится понятно, что, несмотря на различия в алгоритмах и формулах на уровне деталей, цели и подходы к дизайну за ними одинаковы. Это легко понять, поскольку решаемые проблемы схожи, и методы, разработанные для их решения, приводят к схожим результатам. В данной статье, основываясь на собственных размышлениях, я структурировал общие подходы к дизайну чисел в RPG, надеясь, что это поможет тем, кто, как и я, только начинает изучать игровые числа.
Необходимо подчеркнуть, что работа по числовому планированию делится на «построение» и «настройку»: на ранних стадиях создаётся таблица, а в середине и на поздних этапах проводится повторное тестирование и настройка чисел. «Построение» больше связано с техническими аспектами, тогда как «настройка» требует большого опыта в игре и работе. В этой статье рассматриваются основные подходы к «построению», без включения аспектов настройки чисел.
Кроме того, примеры в статье в основном взяты из игры «Genshin Impact» («原神»). Все формулы и диаграммы, связанные с «Genshin Impact», являются лишь грубыми обратными выводами автора и не отражают реальные данные.
1. Основные методы дизайна игровых чисел
1.1 Метод построения числовой структуры
Методы построения числовой структуры различаются для оригинальных и зрелых игровых механик:
Для инновационных оригинальных механик: строится простая система для быстрого итерационного процесса, то есть: Определение рамок атрибутов на основе основной игровой механики. Разработка конкретных формул. Корректировка основной механики и рамок атрибутов. Начало нового цикла итераций. Для механик с зрелым прототипом: Найти аналогичные игры на рынке и провести обратное моделирование их числовой структуры и деталей. Проанализировать цели дизайна и реальные эффекты. Внести корректировки в существующую структуру на основе особенностей собственного проекта. Поскольку числовые параметры будут многократно корректироваться, при построении структуры можно использовать некоторые привычки, повышающие эффективность:
Использование первой страницы Excel как страницы параметров: или размещение области параметров в верхней части каждой страницы, выделяя параметры для ручного ввода на отдельной странице или в отдельной области, а остальные разделы будут ссылаться на них для удобной последующей настройки параметров. Установка параметра контроля масштаба чисел: при построении таблицы все связанные числовые значения умножаются на этот параметр, что облегчает последующую регулировку масштаба чисел. Использование функции проверки данных в Excel: для ограничения ввода в ячейки; если эта функция не удовлетворяет требованиям, необходимо писать проверочные функции вручную, чтобы избежать ошибок при последующих изменениях чисел. При распределении вероятностей (требуется сумма вероятностей 100%, например, распределение атрибутов по каналам прокачки, распределение выпадений по игровым модулям и т.д.): использовать веса вместо прямых вероятностей для удобства последующей корректировки. 1.2 Метод детализации числовых параметров
Процесс построения таблицы обычно включает следующие этапы:
Определение значений базовых параметров, влияющих на игровой опыт, интуитивно. На основе значений базовых параметров выводится вся числовая система. Повторное тестирование и оптимизация. Первый и третий шаги в основном зависят от долгосрочного опыта, тогда как второй шаг (числовое вывод) — это навык, который можно быстро освоить. Общие шаги числового вывода следующие:
ШАГ 1: Чётко определить объект для решения: найти ключевые параметры, поддерживающие числовую систему, и взять их за объект для решения.
ШАГ 2: Чётко определить требования дизайна: это установленные значения базовых параметров или специальные требования дизайна, которые накладывают определённые ограничения на объект для решения. Например, при проектировании пропорций распределения атрибутов требование «время выживания = 20 секунд» должно быть выполнено.
ШАГ 3: Решение: на основе требований дизайна из второго шага вывести неизвестные параметры из первого шага. Если количество ограничений меньше количества параметров (существуют бесконечные решения), можно интуитивно задать значения некоторых неизвестных параметров, а затем вычислить остальные, главное — удовлетворить требования дизайна.
При проектировании чисел с возрастающей тенденцией (например, рост атрибутов) необходимо определить форму кривой на основе взаимосвязи между переменными. Ниже приведены некоторые распространённые типы кривых:
Линейная: линейная функция. Увеличивающаяся маржинальная эффективность: полиномиальная функция высших степеней (степень > 1, чаще всего квадратичная функция), экспоненциальная функция (основание > 0). Убывающая маржинальная эффективность (без асимптоты): полиномиальная функция низших степеней (степень < 1), логарифмическая функция. Убывающая маржинальная эффективность (с асимптотой): экспоненциальная функция (основание < 1), xx+a\frac{x}{x+a}x+ax, обратная пропорциональная функция, функция арктангенса. Примечание: При определении типа кривой старайтесь избегать слишком сложной математики, которая может создать большую нагрузку на программу и замедлить её работу. Лучше использовать только операции сложения, вычитания, умножения, деления и функции min/max, а различные значения параметров позволят достичь различных эффектов. Кроме того, чтобы обеспечить разный игровой опыт на разных этапах игры, в реальных играх часто используются поэтапные функции. Поскольку игроки чувствительны к небольшим значениям, на ранних этапах игры следует уделять им больше внимания, разбивая на большее количество этапов и, при необходимости, отказываясь от использования формул, обрабатывая каждую точку как особый случай вручную. На более поздних этапах, когда числа становятся большими и факторов больше, игроки становятся менее чувствительными, и можно использовать формулы.
При проектировании чисел, включающих вероятности (например, усиление/синтез в прокачке, выпадения/жеребьёвка в добыче, критические удары/уклонение в боях), необходимо контролировать появление экстремально негативных вероятностей, чтобы избежать оттока игроков. Ниже приведены некоторые распространённые методы:
Постепенное увеличение вероятности: если в текущем раунде неудача, то в следующем раунде вероятность увеличивается на фиксированное значение или фиксированный процент. Начальная вероятность и величина увеличения могут быть рассчитаны исходя из установленного максимального количества попыток и среднего количества успешных попыток. Например, вероятность выпадения пятизвёздочного персонажа в пуле «Genshin Impact» составляет 0.6%, начиная с 74-го розыгрыша вероятность увеличивается на 6% за каждый последующий розыгрыш, и к 90-му розыгрышу вероятность достигает 100%. Преобразование вероятности в частоту: Метод предварительного сохранения результатов: если вероятность составляет 5% и гарантия выпадаемости через 60 попыток, то при 100 попытках эта гарантия изменится. Например, можно заранее выбрать определённые числа в диапазоне попыток, чтобы обеспечить гарантированный результат без влияния случайности. Это эффективно предотвращает попытки игроков манипулировать вероятностью путём многократного сохранения и перезагрузки игры. Метод счётчика или пула наград: при убийстве монстров или совершении розыгрышей счётчик увеличивается. Если вероятность составляет 0.1%, то при достижении 1000 убийств или 1000 розыгрышей выпадает редкий предмет, и счётчик обнуляется. Можно также назначить разные веса для различных монстров или билетов, чтобы игроки, убивающие боссов или использующие качественные билеты, быстрее наполняли счётчик. Этот метод часто используется в крупных MMORPG для выпадения редких предметов и позволяет полностью контролировать количество редких предметов на сервере за счёт частоты обновления. 2. RPG Числа — Рост
В RPG-играх различные аспекты способностей игроков постоянно растут. Цель дизайна чисел роста — количественно отразить рост игрока во всех аспектах и спланировать скорость этого роста. Основные подходы к дизайну следующие:
ШАГ 1: Выбрать ориентира роста и спланировать общий темп роста. Цель этого шага — связать рост игрока с временем, проведённым в игре, с помощью ориентира роста. Это позволяет при проектировании других аспектов роста ориентироваться на заранее спланированный темп роста.
ШАГ 2: Определить, какие существуют боевые атрибуты, спроектировать пропорции распределения атрибутов и кривую роста атрибутов. Боевые атрибуты являются основными атрибутами RPG. Цель этого шага — определить общий объём распределения каждого боевого атрибута на каждом этапе роста.
ШАГ 3: Определить каналы прокачки и спланировать пропорции распределения каждого атрибута в каждом канале. Цель этого шага — распределить общий объём распределения, спланированный на втором шаге, по различным каналам прокачки.
ШАГ 4: Детализировать модели роста каждого канала прокачки. Способы прокачки, кривые роста, интервалы роста и другие детали дизайна каждого канала прокачки различаются. Цель этого шага — определить все детали дизайна окончательно.
2.1. Ростовой ориентир
Ростовой ориентир используется для привязки продолжительности игры. Любые другие разделы, касающиеся темпа игры (такие как рост атрибутов, распределение контента, распределение ресурсов и т.д.), привязаны к уровням, что, в свою очередь, привязывает и продолжительность игры.
Наиболее распространённым ростовым ориентиром является уровень персонажа. В зависимости от мира игры, уровень персонажа может быть представлен в других формах, например, количество лет тренировки в игре «斗战神» («Dou Zhan Shen») или возраст в игре «千年» («Millennium»).
После выбора уровня в качестве ростового ориентира необходимо спланировать время игры (часы или дни), необходимое для повышения каждого уровня. Конкретный подход следует брать из трёх шагов, описанных в разделе 1.2:
ШАГ 1: Чётко определить объект для решения. Обычно время, необходимое для повышения каждого уровня, должно постепенно увеличиваться. Можно использовать способ постепенного увеличения через каждые несколько уровней, либо применять линейную функцию или квадратичную функцию для увеличения. Объектом решения являются неизвестные параметры в функции.
ШАГ 2: Чётко определить требования дизайна. Требования дизайна к времени повышения уровня включают установленный жизненный цикл игры, уровень на первый день, уровень на первую неделю, уровень на первый месяц и т.д.
ШАГ 3: Решение. Исходя из установленных условий жизненного цикла игры, уровня на первый день, уровня на первую неделю, уровня на первый месяц и других условий, необходимо обратным образом определить неизвестные параметры в функции.
Возьмём, к примеру, игру «Genshin Impact» («原神»). Поскольку способ прокачки персонажей в «Genshin Impact» является смешанным (включает как горизонтальные элементы сбора, так и вертикальные числовые элементы), игрок может быстро прокачивать несколько персонажей одновременно. Поэтому в качестве ростового ориентира используется не уровень персонажа, а уровень Приключений (Adventure Rank).
Предположим, что обычный игрок играет только 1 час в день, не использует хрупкую смолу (ежедневно потребляет 180 смолы), и его игровой контент включает ежедневные поручения + 4 сундука + 60 ресурсов большого мира + 1 раз Цветок Золота + 1 раз Цветок Откровений + 1 раз Оружейный подземелье + 1 раз Подземелье Талантов + 1,5 раза Подземелье Реликвий + 40 обычных монстров + 20 элитных монстров + 1 босс-монстр + 1 еженедельный босс. Тогда время, необходимое для повышения уровня этого обычного игрока, представлено на рисунке ниже (грубо обратные вычисления автора, не отражают реальные данные):
Можно заметить, что кривая времени повышения уровня в «Genshin Impact» представляет собой сочетание «поэтапной линейности + ускоренного роста». Время повышения уровня рассчитывается по формуле:
Время повышения уровня=a+b×уровень\text{Время повышения уровня} = a + b \times \text{уровень}Время повышения уровня=a+b×уровень
Однако каждые 5-10 уровней параметры a и b изменяются, что приводит к скачкам в графике. Столбец «Δ耗时(天)」 фактически отражает значения параметра b. Каждое изменение цвета в таблице указывает на изменение параметров a и b.
2.2. Рост боевых атрибутов
Примечание: В некоторых книгах для планирования роста атрибутов используются базовые параметры, такие как сила, интеллект, ловкость и т.д. Однако я считаю, что использование боевых атрибутов предпочтительнее, поскольку все каналы прокачки, кроме уровня персонажа, фокусируются на боевых атрибутах. При использовании базовых атрибутов потребуется дополнительное преобразование при распределении атрибутов, что усложняет процесс.
Боевые атрибуты в RPG можно разделить на следующие категории:
Основные боевые атрибуты: Атака, защита, максимальное здоровье. Это атакующая, оборонительная и жизнестойкая треугольника, которые являются неотъемлемыми атрибутами RPG. Продвинутые боевые атрибуты: Эти атрибуты можно разделить на атакующие, оборонительные и здоровьесберегающие. Основная цель их дизайна — обогащение механики расчёта урона, углубление боевой системы и добавление элемент неожиданности в бою. Каждый RPG-игра имеет свои уникальные продвинутые боевые атрибуты, зависящие от дизайна боя. Например, в «Genshin Impact» продвинутые боевые атрибуты включают: Элементальное мастерство (атака) Увеличение урона определённого элемента (атака) Увеличение физического урона (атака) Эффективность щита (защита) Сопротивление определённому элементу (защита) Физическое сопротивление (защита) Увеличение эффекта лечения (здоровье) Увеличение получаемого лечения (здоровье) Скоростные боевые атрибуты: Эти атрибуты влияют на знаменатель DPS и имеют невысокую значимость в RPG, чаще всего являясь скрытыми атрибутами (не отображаются на панели). В «Genshin Impact» скоростные боевые атрибуты включают: Сокращение времени восстановления Эффективность зарядки элементов При проектировании числовых значений роста необходимо спланировать рост боевых атрибутов для стандартного персонажа. В дальнейшем, при проектировании различных классов и монстров, модуль боевых чисел будет опираться на эти стандартные значения. Планирование роста боевых атрибутов обычно делится на два шага:
Определение пропорций распределения атрибутов. Определение кривой роста атрибутов. Первый шаг включает в себя общее распределение боевых атрибутов, а второй шаг — распределение боевых атрибутов на каждый уровень роста ориентировочного показателя.
Пропорции распределения атрибутов:
Согласно трём шагам, описанным в разделе 1.2:
ШАГ 1: Чётко определить объект для решения — определить пропорциональные отношения между общими объёмами распределения различных боевых атрибутов.
ШАГ 2: Чётко определить требования дизайна — основные требования к пропорциям распределения атрибутов связаны с продолжительностью выживания и коэффициентом поглощения урона:
Продолжительность выживания: Самый важный показатель в бою, отражающий победителя сражения и косвенно характеризующий боевую силу персонажа. Предположим, два стандартных персонажа вступают в бой; требования к продолжительности выживания помогут определить соотношение здоровья и урона. Коэффициент поглощения урона: Если формула урона (подробное описание формулы урона см. в разделе 3.1) является мультипликативной, при определении пропорций распределения атрибутов можно не учитывать коэффициент поглощения, так как его можно контролировать через настройку параметров. Если формула урона является вычитательной, необходимо учитывать требования к коэффициенту поглощения при определении соотношения атаки и защиты. ШАГ 3: Решение — предположим, что атака равна 1:
Если формула урона мультипликативная: Интуитивно определить пропорции между другими атакующими атрибутами и атакой. Рассчитать урон на основе формулы урона и уже заданного коэффициента поглощения. Определить соотношение здоровья и атаки на основе заданной продолжительности выживания. В мультипликативной формуле защита может рассматриваться как отдельная система, и соотношение атаки и защиты можно задавать произвольно. Если формула урона вычитательная: Интуитивно определить пропорции между другими атакующими атрибутами и атакой. На основе заданного коэффициента поглощения определить соотношение атаки и защиты. Рассчитать урон на основе формулы урона. На основе заданной продолжительности выживания определить соотношение здоровья и атаки. Особенности пропорций распределения атрибутов в «Genshin Impact»: В «Genshin Impact» требования к продолжительности выживания двух атакующих пятизвёздочных персонажей кажутся неважными, поскольку игра ориентирована на PVE. В реальных боях продолжительность выживания персонажей составляет менее 3 секунд, что на первый взгляд может показаться нелогичным. Однако в контексте PVE это оправдано, так как числовые значения персонажей явно превышают требования игрового процесса. Игроки с достаточными показателями здоровья и защиты легко справляются с монстрами, имеющими низкую атаку и высокое здоровье. Кроме того, игра предполагает командные сражения, где у игроков есть четыре персонажа с разными ролями, включая танков, поддержки и хилеров. Это устраняет проблемы выживания, так как в команде присутствуют персонажи с разными функциями.
Кривая роста атрибутов:
Есть два способа распределения боевых атрибутов: последовательное распределение и поэтапное распределение. Последовательное распределение соответствует вертикальному числовому прокачиванию, а поэтапное распределение — горизонтальному сбору.
Основные боевые атрибуты (атака, защита, здоровье): Распределяются последовательно, обычно линейно увеличиваясь. В поздних стадиях из-за увеличивающегося времени повышения уровня и привыкания игроков может потребоваться добавить скачки для ускоренного роста (например, с уровней 1-50 увеличивать атаку на 90 единиц за уровень, а с уровней 50-100 — на 180 единиц за уровень). Продвинутые боевые атрибуты: Могут распределяться как последовательно, так и поэтапно. Обычно они увеличиваются с ускорением, и на более поздних стадиях объем распределения на узлах становится больше, предоставляя игрокам экспоненциальное числовое стимулирование. В «Genshin Impact» три основных канала прокачки (персонажи, оружие, артефакты) являются смешанными, объединяя как вертикальные числовые элементы, так и горизонтальные элементы сбора. В начале игры ресурсы ограничены, доступно мало персонажей/оружия/артефактов, поэтому прокачка фокусируется на вертикальном росте через постепенное повышение уровня. В поздних стадиях, когда игроки собирают больше ресурсов и могут максимально прокачивать персонажей/оружие/артефакты, прокачка переходит на горизонтальный уровень, где основное усиление достигается за счет сбора новых мощных элементов. Введение различных типов персонажей обогащает игровые механики и позволяет игрокам эффективно адаптироваться к различным игровым ситуациям.
2.3. Распределение боевых атрибутов
Распределение боевых атрибутов заключается в распределении общего объёма распределённых атрибутов, спланированного в разделе 2.2, по различным каналам прокачки.
Перед распределением боевых атрибутов необходимо сначала определить позиционирование каждого канала прокачки, а также детали дизайна прокачки, такие как способы прокачки и кривые роста. В общем случае, количество каналов прокачки в RPG должно быть минимальным для облегчения понимания игроками. Если обнаружено, что некоторые каналы имеют схожее позиционирование, их следует объединить.
Пример из «Genshin Impact»: Как показано на рисунке ниже, каналы прокачки в игре очень упрощены. Канал персонажей предоставляет основные боевые атрибуты (атака, защита, здоровье), каналы оружия и талантов дополняют атаку с точки зрения базовой атаки и множителей соответственно. Канал артефактов добавляет дополнительные атрибуты, углубляя прокачку и создавая числовое превышение. Помимо традиционных пяти каналов прокачки в RPG (персонажи, оружие, экипировка, навыки, еда), в «Genshin Impact» добавлены каналы созвездий и усовершенствований. Эти каналы предназначены для предоставления глубокой прокачки для игроков, готовых вкладывать дополнительные средства ("big spenders").
Позиционирование каналов прокачки:
Персонажи: Основные боевые атрибуты. Оружие: Дополнение атаки через базовую атаку и множители. Таланты: Дополнение атаки через базовую атаку и множители. Артефакты: Дополнение атаки и здоровья, а также предоставление дополнительных атрибутов. Созвездия/Усовершенствования: Предназначены для игроков, готовых вкладывать дополнительные средства, предоставляя дополнительные возможности для глубокой прокачки. В качестве карты каналов прокачки можно представить следующую схему:
Особенности распределения атрибутов в «Genshin Impact»:
Персонажи: Обеспечивают основные боевые атрибуты (атака, защита, здоровье). Оружие и таланты: Дополняют атаку через базовую атаку и множители. Артефакты: Дополняют как атаку, так и здоровье, а также предоставляют множество дополнительных атрибутов, углубляя прокачку и создавая числовое превышение. Созвездия/Усовершенствования: Предназначены для игроков, готовых вкладывать дополнительные средства. Эти каналы предоставляют дополнительные возможности для глубокой прокачки, стимулируя повторные попытки получения новых возможностей через микротранзакции. Примечание: В таблице символ «+» означает, что с обновлениями версий количество доступных для сбора типов постоянно увеличивается.
После планирования процесса прокачки, распределите рост атрибутов по процентам между различными основными категориями прокачки, а затем внутри каждой основной категории выполните вторичное или трёхкратное распределение. При распределении необходимо учитывать важность каждого канала прокачки. Например, если в планировании предполагается, что предпочтение игроков должно быть следующим: канал A > канал B, то при распределении следует выделить больше процентов каналу A. Кроме того, канал A должен быть более очевидным, простым и иметь меньшую случайность, чтобы облегчить понимание и восприятие игроками.
Опять же, на примере «Genshin Impact», используя максимальное распределение (то есть распределение всех атрибутных очков в игре без учёта их доступности), статистика распределения атрибутов примерно следующая (грубо обратные вычисления автора, не отражают реальные данные). Можно заметить, что четыре атрибута — базовое здоровье, базовая защита, увеличение урона определённого элемента и увеличение эффективности лечения — в основном поступают от персонажей и артефактов. Два атрибута — базовая атака и увеличение физического урона — в основном поступают от оружия и артефактов. Остальные атрибуты преимущественно поступают от артефактов. Это подтверждает вышеуказанное предположение (артефакты являются основным источником глубины прокачки). Если игрок хочет сосредоточиться на определённых атрибутах для завершения прокачки, ему необходимо уделить больше внимания артефактам.
Максимальное распределение не учитывает доступность. На самом деле, при получении атрибутных очков через прокачку игроки сталкиваются с множеством ограничений: у одного персонажа может быть только один побочный атрибут, у одного оружия — только одна побочная характеристика, можно носить только пять артефактов, а расположение побочных характеристик артефактов и количество их улучшений ограничены. Это приводит к тому, что распределение атрибутов выпускных персонажей в «Genshin Impact» значительно отличается от приведённой выше таблицы.
Для такого вида прокачки, включающего множество пользовательских выборов, при оценке реальных пропорций распределения можно сначала оценить скрытое направление данного канала прокачки, то есть, какие атрибуты разработчики хотят, чтобы игроки стремились развивать, и какие атрибуты приносят наибольшую реальную пользу. Для игроков разных классов и стилей игры атрибуты с наибольшей пользой различаются. Здесь приведён пример для атакующих персонажей: побочные атрибуты персонажей и оружия выбраны как критический шанс и критический урон, артефакты предоставляют множество двойных критических характеристик и небольшое количество других атрибутов. Распределение атрибутов типичного атакующего персонажа примерно выглядит следующим образом (грубо обратные вычисления автора, не отражают реальные данные):
На основе анализа в разделе 2.2, «Genshin Impact» как чисто PVE-игра, числовые показатели персонажей явно превышают требования игрового процесса. Неконфигурируемые параметры роста, предоставляющие здоровье и защиту, уже достаточны, а вместе с мощными танками, поддержкой и хилерами проблемы выживаемости практически отсутствуют. Поэтому выбор игроков часто сводится к тому, чтобы использовать доступные для настройки параметры роста для увеличения атакующих атрибутов, стремясь к быстрому уничтожению монстров. Поскольку игроки в основном стремятся к максимальному DPS, атакующие персонажи накапливают двойной критический шанс и критический урон, персонажи, увеличивающие урон, также накапливают двойной критический шанс и элементальное мастерство. За исключением некоторых хилеров, которые немного увеличивают бонусы к лечению, атрибуты защиты и здоровья остаются практически неиспользуемыми. Способ решения этой проблемы разработчиков заключается в трансформации, то есть, умножении множителей навыков на другие атрибуты, а не на базовую атаку в панели, тем самым преобразуя эти атрибуты в атакующий урон. В настоящее время в «Genshin Impact» персонажи, которые преобразуют здоровье, это Ху Тао, а персонажи, преобразующие защиту, это Аратакки Ито и Албедо.
2.4. Детализация роста
После выполнения первых трёх шагов структура системы роста уже создана. Следующим шагом необходимо усовершенствовать детали дизайна каждого канала прокачки.
Первый шаг: Определение распределения атрибутов по каналам прокачки
Сначала, используя метод бенчмаркинга ростового ориентира, определите количество боевых атрибутов, распределяемых в каждом канале прокачки на каждом этапе:
Для горизонтальной прокачки: сопоставьте узлы распределения различных предметов с ростовыми ориентирами. Для вертикальной прокачки: сопоставьте уровень данного канала прокачки с ростовыми ориентирами. Поскольку рост боевых атрибутов и уровень канала прокачки оба привязаны к ростовым ориентирам, можно связать их через эти ориентиры. То есть:
Количество боевых атрибутов для определённого канала на определённом этапе=Общее количество распределённых боевых атрибутов на соответствующем этапе роста×Процентное распределение этого атрибута в данном канале\text{Количество боевых атрибутов для определённого канала на определённом этапе} = \text{Общее количество распределённых боевых атрибутов на соответствующем этапе роста} \times \text{Процентное распределение этого атрибута в данном канале}Количество боевых атрибутов для определённого канала на определённом этапе=Общее количество распределённых боевых атрибутов на соответствующем этапе роста×Процентное распределение этого атрибута в данном канале
Второй шаг: Разработка формул преобразования атрибутов
Если канал прокачки имеет собственный набор атрибутов, необходимо разработать формулы преобразования атрибутов и провести обратное моделирование. Например, во многих RPG канал прокачки персонажей не напрямую увеличивает боевые атрибуты, а вместо этого увеличивает базовые атрибуты, такие как сила, интеллект, ловкость и т.д. Затем эти базовые атрибуты преобразуются в боевые атрибуты, такие как физическая атака, магическая атака, скорость атаки и т.д., с помощью специальных формул преобразования. В таких случаях необходимо вернуть распределённые боевые атрибуты канала прокачки персонажей в базовые атрибуты.
3. RPG Числовые показатели — Бой
3.1. Формула урона
Функция расчёта урона предназначена для вычисления итогового урона, наносимого атакующей стороной, на основе её атакующих атрибутов и защитных атрибутов защищающейся стороны. Формулы расчёта урона можно разделить на две основные категории: вычитательная формула и мультипликативная формула.
Вычитательная формула:
Урон=Атака−Защита\text{Урон} = \text{Атака} - \text{Защита}Урон=Атака−Защита
Здесь «Атака» обозначает сумму всех атакующих атрибутов, а «Защита» — сумму всех защитных атрибутов. Если используется вычитательная формула расчёта урона, то «Атака» и «Защита» обычно рассчитываются с помощью сложения:
Атака=Атака персонажа+Атака оружия+Атака навыка+…\text{Атака} = \text{Атака персонажа} + \text{Атака оружия} + \text{Атака навыка} + \dotsАтака=Атака персонажа+Атака оружия+Атака навыка+…
Защита=Защита персонажа+Защита экипировки+…\text{Защита} = \text{Защита персонажа} + \text{Защита экипировки} + \dotsЗащита=Защита персонажа+Защита экипировки+…
Пусть hhh обозначает урон (harm), aaa — атаку (attack), ddd — защиту (defense). Тогда вычитательная формула может быть выражена как: h=a−dh = a - dh=a−d h′(d)=−1<0h'(d) = -1 < 0h′(d)=−1<0 h′′(d)=0h''(d) = 0h′′(d)=0
Урон уменьшается по мере увеличения защиты, при этом предельная отдача от повышения защиты остаётся неизменной.
Преимущества вычитательной формулы:
Удобство для игроков: Лёгкость понимания, так как урон можно быстро подсчитать в уме. Недостатки вычитательной формулы:
Постоянная предельная отдача от защиты: Игроки могут массово повышать защиту, что приводит к проблеме непроходимости обороны (непробиваемости). В случае дуэли (1v1) проблему непробиваемости решить сложно, но в сражениях 1 против N её можно решить, уменьшая эффективность защиты по мере увеличения числа нападающих. Мультипликативная формула:
Урон=Атака×(1−Иммунитет к урону)\text{Урон} = \text{Атака} \times (1 - \text{Иммунитет к урону})Урон=Атака×(1−Иммунитет к урону) где Иммунитет к урону=ЗащитаЗащита+Параметр выражения\text{Иммунитет к урону} = \frac{\text{Защита}}{\text{Защита} + \text{Параметр выражения}}Иммунитет к урону=Защита+Параметр выраженияЗащита
Здесь «Атака» обозначает сумму всех атакующих атрибутов, а «Защита» — сумму всех защитных атрибутов. Если используется мультипликативная формула расчёта урона, то «Атака» и «Защита» обычно рассчитываются с помощью умножения:
Атака=(Атака персонажа+Атака оружия)×(1+Процент воздействия навыка)×(1+Процент увеличения урона экипировки)×…\text{Атака} = (\text{Атака персонажа} + \text{Атака оружия}) \times (1 + \text{Процент воздействия навыка}) \times (1 + \text{Процент увеличения урона экипировки}) \times \dotsАтака=(Атака персонажа+Атака оружия)×(1+Процент воздействия навыка)×(1+Процент увеличения урона экипировки)×…
Защита=(Защита персонажа+Защита экипировки)×(1+Процент воздействия навыка)×…\text{Защита} = (\text{Защита персонажа} + \text{Защита экипировки}) \times (1 + \text{Процент воздействия навыка}) \times \dotsЗащита=(Защита персонажа+Защита экипировки)×(1+Процент воздействия навыка)×…
Пусть hhh обозначает урон (harm), aaa — атаку (attack), ddd — защиту (defense), drdrdr — иммунитет к урону (defense rate), pepepe — параметр выражения (parameter expression). Тогда формула иммунитета к урону может быть выражена как: dr(d)=dd+pedr(d) = \frac{d}{d + pe}dr(d)=d+ped а формула урона: h=a×(1−dr(d))h = a \times (1 - dr(d))h=a×(1−dr(d))
Эта формула обладает следующими свойствами:
dr<100%dr < 100\%dr<100%, dr′(d)>0dr'(d) > 0dr′(d)>0, h′(d)=−a×dr′(d)<0h'(d) = -a \times dr'(d) < 0h′(d)=−a×dr′(d)<0:
Иммунитет к урону увеличивается с ростом защиты, приближаясь к 100%, что приводит к уменьшению урона, приближаясь к 0. В реальных играх обычно не допускается достижение 100% иммунитета к урону. Вместо этого, максимальное значение иммунитета контролируется, чтобы оно приближалось к критическому значению, обычно 60% или 75%. Это предотвращает проблему непроходимости обороны и гарантирует, что урон останется не менее 40% или 25%. dr′′(d)<0dr''(d) < 0dr′′(d)<0, h′′(d)=−a×dr′′(d)>0h''(d) = -a \times dr''(d) > 0h′′(d)=−a×dr′′(d)>0:
Приближение иммунитета к критическому значению происходит с убывающей предельной отдачей. По мере постоянного увеличения защиты, уменьшение урона становится всё менее значительным, что приводит к убывающей предельной отдаче от повышения защиты. Это стимулирует игроков более сбалансированно распределять атрибуты. Параметр pepepe может быть постоянным или зависеть от различных переменных, таких как уровень атакующей стороны, уровень защищающейся стороны, атака атакующей стороны и т.д. Приведём несколько примеров:
В игре «League of Legends» (Лига Легенд) параметр pepepe является постоянным.
В этом случае возникает интересное свойство: эффективное здоровье увеличивается линейно с ростом защиты. Причина в следующем: Эффективное здоровье=Фактическое здоровье1−Иммунитет к урону=Фактическое здоровьеped+pe=Фактическое здоровье×(1+dpe)\text{Эффективное здоровье} = \frac{\text{Фактическое здоровье}}{1 - \text{Иммунитет к урону}} = \frac{\text{Фактическое здоровье}}{\frac{pe}{d + pe}} = \text{Фактическое здоровье} \times \left(1 + \frac{d}{pe}\right)Эффективное здоровье=1−Иммунитет к уронуФактическое здоровье=d+pepeФактическое здоровье=Фактическое здоровье×(1+ped) Если pe=100pe = 100pe=100, то защита фактически представляет собой процентное увеличение фактического здоровья защищающейся стороны. Примечание: Эффективное здоровье (Effective HP, EHP) обозначает фактическое здоровье плюс эквивалентное количество здоровья, предоставляемое всеми защитными атрибутами защищающейся стороны (защита, уклонение, блокирование, сопротивление критическим ударам и т.д.). Формула EHP выглядит следующим образом: EHP=Фактическое здоровье1−Иммунитет к урону\text{EHP} = \frac{\text{Фактическое здоровье}}{1 - \text{Иммунитет к урону}}EHP=1−Иммунитет к уронуФактическое здоровье
В игре «Genshin Impact» параметр pepepe зависит от уровня атакующей стороны: PE=a×уровень атакующей стороны+b\text{PE} = a \times \text{уровень атакующей стороны} + bPE=a×уровень атакующей стороны+b Пусть l1l1l1 обозначает уровень атакующей стороны. Тогда: dr′(l1)<0dr'(l1) < 0dr′(l1)<0 h′(l1)=−a×dr′(l1)>0h'(l1) = -a \times dr'(l1) > 0h′(l1)=−a×dr′(l1)>0 При неизменной защите, чем выше уровень атакующей стороны, тем больший урон она наносит. В рамках этой формулы в игре существует механика подавления уровня, что создаёт ощущение значительного роста. Например, мировые боссы в «Genshin Impact» сначала имеют значительно более высокий уровень, создавая ощущение давления, но в поздних стадиях становятся легко побеждаемыми. В игре «World of Warcraft» параметр pepepe зависит от уровня защищающейся стороны: PE=a×уровень защищающейся стороны+b\text{PE} = a \times \text{уровень защищающейся стороны} + bPE=a×уровень защищающейся стороны+b Пусть l2l2l2 обозначает уровень защищающейся стороны. Тогда: dr′(l2)<0dr'(l2) < 0dr′(l2)<0 При неизменной защите, чем выше уровень защищающейся стороны, тем выше иммунитет к урону. В рамках этой формулы, по мере повышения уровня игрока, ему всё больше необходимо повышать защиту (иначе фактическая защита будет автоматически снижаться), что предоставляет игрокам долгосрочную цель для улучшения своих атрибутов. В игре «Diablo» параметр pepepe зависит от атаки: PE=a×атака+b\text{PE} = a \times \text{атака} + bPE=a×атака+b В отличие от других формул, здесь: h′′(a)>0h''(a) > 0h′′(a)>0 То есть, урон ускоряется по мере увеличения атаки, что приводит к возрастающей предельной отдаче от повышения атаки. Это выгодно атакующей стороне и часто используется в одиночных PVE-играх, где игроки массово уничтожают монстров. Однако для PVP-игр такая формула не подходит, так как она увеличивает разрыв между игроками и делает продолжительность выживания персонажей нестабильной. Итоги анализа различных формул:
Вычитательная формула и мультипликативная формула с pepepe, включающим атаку, при использовании в PVP могут вызвать определённые проблемы. Обычно они применяются в PVE, при этом: Вычитательная формула подходит для более хардкорных PVE-игр. Мультипликативная формула с pepepe, включающим атаку, подходит для PVE-игр с механикой массового уничтожения монстров («грепинг»). Другие мультипликативные формулы хорошо работают как в PVE, так и в PVP: В PVE-играх с лёгкой прокачкой параметра pepepe может быть постоянным. В RPG-играх с глубокой прокачкой, включающей PVP, параметр pepepe обычно связывается с уровнем персонажа. Примечание: В реальных играх могут использоваться комбинированные формулы. Например, в традиционных RPG физическая атака часто ассоциируется с ближним боем и высокой техникой/сложностью уклонения, поэтому для неё может использоваться вычитательная формула, повышающая отдачу от защиты, стимулируя игроков уделять внимание физической защите. Магическая атака, часто ассоциируемая с дальним боем и высокой манёвренностью, может использоваться с мультипликативной формулой, побуждая игроков больше фокусироваться на уклонении, а не на магической защите.
В некоторых играх, чтобы предотвратить нежелательное поведение игроков или подчеркнуть уникальные особенности геймплея, базовые формулы расчёта урона могут быть изменены. Например, можно вводить штрафы за отклонение атрибутов игрока от целевых значений: Итоговый урон=Исходный урон×(1+max?{0,a×Целевой атрибут−Атрибут игрокаЦелевой атрибут+b})\text{Итоговый урон} = \text{Исходный урон} \times \left(1 + \max\left\{0, a \times \frac{\text{Целевой атрибут} - \text{Атрибут игрока}}{\text{Целевой атрибут}} + b \right\}\right)Итоговый урон=Исходный урон×(1+max{0,a×Целевой атрибутЦелевой атрибут−Атрибут игрока+b}) Здесь целевой атрибут определяется в зависимости от целей дизайна:
Для геймплея, проверяющего атакующие способности игрока, целевым атрибутом может быть целевая атака. Для геймплея, проверяющего выживаемость игрока, целевым атрибутом может быть целевая защита. Чтобы предотвратить повышение уровня игроком до уровня монстра, целевым атрибутом может быть уровень монстра. Кроме того, в некоторых играх, чтобы добавить элемент неожиданности в бою, урон может варьироваться в пределах определённого диапазона. Для этого вводятся два параметра — максимальный и минимальный коэффициенты урона. После расчёта урона по основной формуле, итоговый урон выбирается случайным образом в диапазоне: Итоговый урон=Исходный урон×Случайный коэффициент между минимальным и максимальным\text{Итоговый урон} = \text{Исходный урон} \times \text{Случайный коэффициент между минимальным и максимальным}Итоговый урон=Исходный урон×Случайный коэффициент между минимальным и максимальным
Пример формулы урона в игре «Genshin Impact»:
В «Genshin Impact» используется мультипликативная формула расчёта урона, состоящая из семи множителей:
Первые пять множителей используются для расчёта «атаки». Последние два множителя используются для расчёта «защиты». Атака в панели = Базовая атака + Бонус к атаке
Базовая атака = Атака персонажа + Атака оружия
Бонус к атаке = Атака из основных и побочных слотов артефактов + Базовая атака × Процент бонуса к атаке
У некоторых персонажей (Ху Тао, Ито Арато, Албедо) некоторые навыки зависят от максимального здоровья или защиты. В таких случаях данный множитель используется для максимального здоровья или защиты, а не для атаки.
Для навыков, увеличивающих урон (например, Флайинг Флаг Ян Цзин из Юнь Цзин), необходимо добавить к "Данным персонажа на панели × множитель навыка персонажа" дополнительный урон:
Урон=(Данные персонажа на панели×Множитель навыка)+(Данные персонажа, увеличивающие урон×Множитель навыка, увеличивающий урон)\text{Урон} = (\text{Данные персонажа на панели} \times \text{Множитель навыка}) + (\text{Данные персонажа, увеличивающие урон} \times \text{Множитель навыка, увеличивающий урон})Урон=(Данные персонажа на панели×Множитель навыка)+(Данные персонажа, увеличивающие урон×Множитель навыка, увеличивающий урон)
Процент увеличения урона = Увеличение урона определённого элемента + Увеличение физического урона + Прочие увеличения урона. Прочие увеличения урона могут поступать из созвездий, эффектов оружия, эффектов артефактов или из навыков, увеличивающих урон (например, звездная аномалия Мона).
Эта формула основана на ожидаемом уроне: Урон без критика×(1−Критический шанс)+Урон без критика×(1+Критический урон)×Критический шанс=Урон без критика×(1+Критический шанс×Критический урон)\text{Урон без критика} \times (1 - \text{Критический шанс}) + \text{Урон без критика} \times (1 + \text{Критический урон}) \times \text{Критический шанс} = \text{Урон без критика} \times (1 + \text{Критический шанс} \times \text{Критический урон})Урон без критика×(1−Критический шанс)+Урон без критика×(1+Критический урон)×Критический шанс=Урон без критика×(1+Критический шанс×Критический урон)
Общий множитель реакций усиления = Базовый множитель реакций усиления × (1 + Увеличение элементального мастерства + Прочие множители реакций усиления).
Базовый множитель реакций усиления = 2, когда элементальная реакция производится вторичным элементом, который подавляет первичный элемент. Базовый множитель реакций усиления = 1.5, когда первичный элемент подавляет вторичный элемент. Увеличение элементального мастерства = 2.78×Элементальное мастерствоЭлементальное мастерство+14002.78 \times \frac{\text{Элементальное мастерство}}{\text{Элементальное мастерство} + 1400}2.78×Элементальное мастерство+1400Элементальное мастерство. В обычных условиях:
Иммунитет к урону = Сопротивление. Если Сопротивление > 75%, то Иммунитет к урону рассчитывается как: Иммунитет к урону=4×Сопротивление1+4×Сопротивление\text{Иммунитет к урону} = \frac{4 \times \text{Сопротивление}}{1 + 4 \times \text{Сопротивление}}Иммунитет к урону=1+4×Сопротивление4×Сопротивление Если Сопротивление < 0, то Иммунитет к урону рассчитывается как: Иммунитет к урону=Сопротивление2\text{Иммунитет к урону} = \frac{\text{Сопротивление}}{2}Иммунитет к урону=2Сопротивление Иммунитет к урону от защиты: Иммунитет к урону от защиты=Защита защищающейся стороныЗащита защищающейся стороны+5×(Уровень атакующей стороны+100)\text{Иммунитет к урону от защиты} = \frac{\text{Защита защищающейся стороны}}{\text{Защита защищающейся стороны} + 5 \times (\text{Уровень атакующей стороны} + 100)}Иммунитет к урону от защиты=Защита защищающейся стороны+5×(Уровень атакующей стороны+100)Защита защищающейся стороны
Защита монстра: Защита монстра=5×(Уровень монстра+100)×(1−Процент снижения защиты)\text{Защита монстра} = 5 \times (\text{Уровень монстра} + 100) \times (1 - \text{Процент снижения защиты})Защита монстра=5×(Уровень монстра+100)×(1−Процент снижения защиты)
Из формул видно, что при равенстве уровня персонажа и уровня монстра и отсутствии снижения защиты, иммунитет к урону от защиты составляет 50%.
В «Genshin Impact» элементальные реакции включают не только реакции усиления, но и реакции катастрофы. Реакции усиления отражают отношения подавления, что приводит к увеличенному атакующему урону из-за подавления. Реакции катастрофы отражают взаимодействие с окружением, где реакция выступает как третичная сущность, наносящая урон объектам на поле боя. Формула расчёта урона реакций катастрофы следующая:
Элементальные реакции катастрофы: базовый урон зависит только от уровня персонажа, и его зависимость представлена как «поэтапная линейность + ускоренный рост».
Общий множитель реакций катастрофы: Общий множитель реакций катастрофы=Базовый множитель реакций катастрофы×(1+Увеличение элементального мастерства+Прочие увеличения реакций катастрофы)\text{Общий множитель реакций катастрофы} = \text{Базовый множитель реакций катастрофы} \times (1 + \text{Увеличение элементального мастерства} + \text{Прочие увеличения реакций катастрофы})Общий множитель реакций катастрофы=Базовый множитель реакций катастрофы×(1+Увеличение элементального мастерства+Прочие увеличения реакций катастрофы)
Базовые множители реакций катастрофы:
Увеличение элементального мастерства для реакций активации: Увеличение элементального мастерства=5×Элементальное мастерствоЭлементальное мастерство+1200\text{Увеличение элементального мастерства} = \frac{5 \times \text{Элементальное мастерство}}{\text{Элементальное мастерство} + 1200}Увеличение элементального мастерства=Элементальное мастерство+12005×Элементальное мастерство
Прочие увеличения элементального мастерства для реакций катастрофы: Прочие увеличения элементального мастерства=16×Элементальное мастерствоЭлементальное мастерство+2000\text{Прочие увеличения элементального мастерства} = \frac{16 \times \text{Элементальное мастерство}}{\text{Элементальное мастерство} + 2000}Прочие увеличения элементального мастерства=Элементальное мастерство+200016×Элементальное мастерство
3.2. Формула боевой мощи
Боевой показатель отражает продолжительность выживаемости, которая определяется тремя факторами: боевыми атрибутами, навыковыми атрибутами (регулируемыми правилами навыков, такими как увеличение урона, вспышка и т.д.) и навыками управления игрока. Поскольку уровень мастерства игроков варьируется, при проектировании числовых значений обычно обсуждается только боевой показатель персонажа, а боевые формулы включают только боевые атрибуты и навыковые атрибуты как факторы влияния.
Расчёт боевой мощи можно разделить на два шага:
Первый шаг: Преобразование навыковых атрибутов, которые невозможно включить в формулу урона, в APS или EHP. Идея состоит в том, чтобы сначала интуитивно определить коэффициенты добавления, создать таблицу коэффициентов добавления и затем постоянно корректировать эту таблицу через тестирование, а также корректировать все влияющие на это навыки. Второй шаг: Вычисление боевой мощи персонажа на основе боевой формулы. Примечание: DPS обычно обозначает урон в секунду: DPS=Урон×Скорость атаки=Атака×(1−Иммунитет к урону)×Скорость атаки\text{DPS} = \text{Урон} \times \text{Скорость атаки} = \text{Атака} \times (1 - \text{Иммунитет к урону}) \times \text{Скорость атаки}DPS=Урон×Скорость атаки=Атака×(1−Иммунитет к урону)×Скорость атаки Здесь вводится новая величина APS (Attack Per Second), обозначающая количество атаки, наносимой в секунду: APS=Атака×Скорость атаки\text{APS} = \text{Атака} \times \text{Скорость атаки}APS=Атака×Скорость атаки
Преобразование атакующих атрибутов, не включённых в формулу урона, в APS:
Примечание: Время восстановления (CD) может измеряться различными способами, здесь предполагается, что CD начинает отсчитываться сразу после активации навыка.
Увеличение урона (Buff):
Предположим, что данный BUFF увеличивает урон на a%a\%a% в течение времени действия навыка. Тогда: ΔAPS=Исходный APS×a%×min?{ПродолжительностьCD время,1}×(1+Коэффициент бонуса)ΔAPS = \text{Исходный APS} \times a\% \times \min\left\{ \frac{\text{Продолжительность}}{\text{CD время}}, 1 \right\} \times (1 + \text{Коэффициент бонуса})ΔAPS=Исходный APS×a%×min{CD времяПродолжительность,1}×(1+Коэффициент бонуса) Обычно ΔAPSΔAPSΔAPS для BUFF-навызовов немного выше, чем для прямых уронов, поскольку при низком уровне здоровья противника использование прямых уронов может привести к мгновенной смерти, тогда как BUFF-навызов может позволить союзникам спасти цель. Поэтому необходим дополнительный коэффициент бонуса, который устанавливается интуитивно и далее корректируется при тестировании. Снижение сопротивления:
Сначала преобразуйте снижение сопротивления в увеличение урона, а затем примените формулу для увеличения урона. Жёсткий контроль (Цель не может совершать никаких действий после контроля):
В течение времени действия навыка, наносимый союзниками урон равен увеличенному урону навыка: ΔAPS=Исходный APS×ПродолжительностьCD время−ПродолжительностьΔAPS = \text{Исходный APS} \times \frac{\text{Продолжительность}}{\text{CD время} - \text{Продолжительность}}ΔAPS=Исходный APS×CD время−ПродолжительностьПродолжительность Мягкий контроль (например, «Молчание», при котором цель может только выполнять простые атаки, но не использовать навыки):
Сначала преобразуйте его в жёсткий контроль, где продолжительность жёсткого контроля, эквивалентного данному атрибуту, определяется следующим образом: Продолжительность жёсткого контроля=APS цели при простых атаках×Продолжительность мягкого контроляОбщий APS цели после использования навыка\text{Продолжительность жёсткого контроля} = \frac{\text{APS цели при простых атаках} \times \text{Продолжительность мягкого контроля}}{\text{Общий APS цели после использования навыка}}Продолжительность жёсткого контроля=Общий APS цели после использования навыкаAPS цели при простых атаках×Продолжительность мягкого контроля Затем примените формулу жёсткого контроля. Время наложения (Кастинг):
Навыки с временем наложения могут быть прерваны, поэтому они не могут стабильно обеспечивать APS. Можно разработать формулу с отрицательным коэффициентом на основе времени наложения: ΔAPS=ΔhCD время×(1+Время наложения×Коэффициент бонуса)ΔAPS = \frac{Δh}{\text{CD время}} \times (1 + \text{Время наложения} \times \text{Коэффициент бонуса})ΔAPS=CD времяΔh×(1+Время наложения×Коэффициент бонуса) где ΔhΔhΔh — дополнительный урон, предоставляемый навыком. Дистанция наложения (Расстояние):
Чем дальше персонаж находится, тем меньше вероятность быть прерванным, тем дольше время эффективного вывода урона. Можно разработать формулу на основе расстояния: ΔAPS=ΔhCD время×(1+Расстояние×Коэффициент бонуса)ΔAPS = \frac{Δh}{\text{CD время}} \times (1 + \text{Расстояние} \times \text{Коэффициент бонуса})ΔAPS=CD времяΔh×(1+Расстояние×Коэффициент бонуса) Элементальное прикрепление:
Поскольку это может вызвать элементальные реакции, можно установить коэффициент: ΔAPS=Δh×(1+Коэффициент бонуса)CD времяΔAPS = \frac{Δh \times (1 + \text{Коэффициент бонуса})}{\text{CD время}}ΔAPS=CD времяΔh×(1+Коэффициент бонуса) Этот коэффициент можно установить интуитивно и далее корректировать при тестировании. Вспышка (Blink):
Сначала установите коэффициент: ΔAPS=Исходный APS×Коэффициент бонусаΔAPS = \text{Исходный APS} \times \text{Коэффициент бонуса}ΔAPS=Исходный APS×Коэффициент бонуса Затем в процессе тестирования наблюдайте, насколько APS у групп с Blink выше, чем у групп без Blink. Или проведите тестирование, сравнив Blink с определённым увеличением атаки: если разница в боевых показателях между двумя группами значительно велика, скорректируйте количество атаки и повторите тестирование, чтобы окончательно установить Blink в разумный диапазон увеличения атаки. Преобразование защитных атрибутов, не включённых в формулу урона, в EHP:
Жёсткий контроль / Мягкий контроль:
Контрольные атрибуты можно преобразовывать как в атакующие атрибуты (APS), так и в защитные атрибуты (EHP). Например, для жёсткого контроля: Процент снижения урона=Снижение уронаОбщий урон=APS противника×ПродолжительностьAPS противника×CD время=ПродолжительностьCD время\text{Процент снижения урона} = \frac{\text{Снижение урона}}{\text{Общий урон}} = \frac{\text{APS противника} \times \text{Продолжительность}}{\text{APS противника} \times \text{CD время}} = \frac{\text{Продолжительность}}{\text{CD время}}Процент снижения урона=Общий уронСнижение урона=APS противника×CD времяAPS противника×Продолжительность=CD времяПродолжительность ΔEHP=Исходный EHP1−ПродолжительностьCD время−Исходный EHP=Исходный EHP×ПродолжительностьCD время−ПродолжительностьΔEHP = \frac{\text{Исходный EHP}}{1 - \frac{\text{Продолжительность}}{\text{CD время}}} - \text{Исходный EHP} = \text{Исходный EHP} \times \frac{\text{Продолжительность}}{\text{CD время} - \text{Продолжительность}}ΔEHP=1−CD времяПродолжительностьИсходный EHP−Исходный EHP=Исходный EHP×CD время−ПродолжительностьПродолжительность Лечение:
Для одноразового лечения: ΔEHP=Лечение×Продолжительность выживаемостиCD времяΔEHP = \text{Лечение} \times \frac{\text{Продолжительность выживаемости}}{\text{CD время}}ΔEHP=Лечение×CD времяПродолжительность выживаемости После преобразования атрибутов навыков в APS или EHP, можно использовать формулу боевой мощи для расчёта боевой мощи персонажа. Формулы расчёта боевой мощи разнообразны, здесь приведены две наиболее распространённые.
3.2. Формула боевой мощи
Боевой показатель отражает продолжительность выживаемости, которая определяется тремя факторами: боевыми атрибутами, навыковыми атрибутами (регулируемыми правилами навыков, такими как увеличение урона, вспышка и т.д.) и навыками управления игрока. Поскольку уровень мастерства игроков варьируется, при проектировании числовых значений обычно обсуждается только боевой показатель персонажа, а боевые формулы включают только боевые атрибуты и навыковые атрибуты как факторы влияния.
Расчёт боевой мощи можно разделить на два шага:
Первый шаг: Преобразование навыковых атрибутов, которые невозможно включить в формулу урона, в APS или EHP. Идея состоит в том, чтобы сначала интуитивно определить коэффициенты добавления, создать таблицу коэффициентов добавления и затем постоянно корректировать эту таблицу через тестирование, а также корректировать все влияющие на это навыки. Второй шаг: Вычисление боевой мощи персонажа на основе боевой формулы. Примечание: DPS обычно обозначает урон в секунду: DPS=Урон×Скорость атаки=Атака×(1−Иммунитет к урону)×Скорость атаки\text{DPS} = \text{Урон} \times \text{Скорость атаки} = \text{Атака} \times (1 - \text{Иммунитет к урону}) \times \text{Скорость атаки}DPS=Урон×Скорость атаки=Атака×(1−Иммунитет к урону)×Скорость атаки Здесь вводится новая величина APS (Attack Per Second), обозначающая количество атаки, наносимой в секунду: APS=Атака×Скорость атаки\text{APS} = \text{Атака} \times \text{Скорость атаки}APS=Атака×Скорость атаки
Преобразование атакующих атрибутов, не включённых в формулу урона, в APS:
Примечание: Время восстановления (CD) может измеряться различными способами, здесь предполагается, что CD начинает отсчитываться сразу после активации навыка.
Увеличение урона (Buff):
Предположим, что данный BUFF увеличивает урон на a%a\%a% в течение времени действия навыка. Тогда: ΔAPS=Исходный APS×a%×min?{ПродолжительностьCD время,1}×(1+Коэффициент бонуса)ΔAPS = \text{Исходный APS} \times a\% \times \min\left\{ \frac{\text{Продолжительность}}{\text{CD время}}, 1 \right\} \times (1 + \text{Коэффициент бонуса})ΔAPS=Исходный APS×a%×min{CD времяПродолжительность,1}×(1+Коэффициент бонуса) Обычно ΔAPSΔAPSΔAPS для BUFF-навызовов немного выше, чем для прямых уронов, поскольку при низком уровне здоровья противника использование прямых уронов может привести к мгновенной смерти, тогда как BUFF-навызов может позволить союзникам спасти цель. Поэтому необходим дополнительный коэффициент бонуса, который устанавливается интуитивно и далее корректируется при тестировании. Снижение сопротивления:
Сначала преобразуйте снижение сопротивления в увеличение урона, а затем примените формулу для увеличения урона. Жёсткий контроль (Цель не может совершать никаких действий после контроля):
В течение времени действия навыка, наносимый союзниками урон равен увеличенному урону навыка: ΔAPS=Исходный APS×ПродолжительностьCD время−ПродолжительностьΔAPS = \text{Исходный APS} \times \frac{\text{Продолжительность}}{\text{CD время} - \text{Продолжительность}}ΔAPS=Исходный APS×CD время−ПродолжительностьПродолжительность Мягкий контроль (например, «Молчание», при котором цель может только выполнять простые атаки, но не использовать навыки):
Сначала преобразуйте его в жёсткий контроль, где продолжительность жёсткого контроля, эквивалентного данному атрибуту, определяется следующим образом: Продолжительность жёсткого контроля=APS цели при простых атаках×Продолжительность мягкого контроляОбщий APS цели после использования навыка\text{Продолжительность жёсткого контроля} = \frac{\text{APS цели при простых атаках} \times \text{Продолжительность мягкого контроля}}{\text{Общий APS цели после использования навыка}}Продолжительность жёсткого контроля=Общий APS цели после использования навыкаAPS цели при простых атаках×Продолжительность мягкого контроля Затем примените формулу жёсткого контроля. Время наложения (Кастинг):
Навыки с временем наложения могут быть прерваны, поэтому они не могут стабильно обеспечивать APS. Можно разработать формулу с отрицательным коэффициентом на основе времени наложения: ΔAPS=ΔhCD время×(1+Время наложения×Коэффициент бонуса)ΔAPS = \frac{Δh}{\text{CD время}} \times (1 + \text{Время наложения} \times \text{Коэффициент бонуса})ΔAPS=CD времяΔh×(1+Время наложения×Коэффициент бонуса) где ΔhΔhΔh — дополнительный урон, предоставляемый навыком. Дистанция наложения (Расстояние):
Чем дальше персонаж находится, тем меньше вероятность быть прерванным, тем дольше время эффективного вывода урона. Можно разработать формулу на основе расстояния: ΔAPS=ΔhCD время×(1+Расстояние×Коэффициент бонуса)ΔAPS = \frac{Δh}{\text{CD время}} \times (1 + \text{Расстояние} \times \text{Коэффициент бонуса})ΔAPS=CD времяΔh×(1+Расстояние×Коэффициент бонуса) Элементальное прикрепление:
Поскольку это может вызвать элементальные реакции, можно установить коэффициент: ΔAPS=Δh×(1+Коэффициент бонуса)CD времяΔAPS = \frac{Δh \times (1 + \text{Коэффициент бонуса})}{\text{CD время}}ΔAPS=CD времяΔh×(1+Коэффициент бонуса) Этот коэффициент можно установить интуитивно и далее корректировать при тестировании. Вспышка (Blink):
Сначала установите коэффициент: ΔAPS=Исходный APS×Коэффициент бонусаΔAPS = \text{Исходный APS} \times \text{Коэффициент бонуса}ΔAPS=Исходный APS×Коэффициент бонуса Затем в процессе тестирования наблюдайте, насколько APS у групп с Blink выше, чем у групп без Blink. Или проведите тестирование, сравнив Blink с определённым увеличением атаки: если разница в боевых показателях между двумя группами значительно велика, скорректируйте количество атаки и повторите тестирование, чтобы окончательно установить Blink в разумный диапазон увеличения атаки. Преобразование защитных атрибутов, не включённых в формулу урона, в EHP:
Жёсткий контроль / Мягкий контроль:
Контрольные атрибуты можно преобразовывать как в атакующие атрибуты (APS), так и в защитные атрибуты (EHP). Например, для жёсткого контроля: Процент снижения урона=Снижение уронаОбщий урон=APS противника×ПродолжительностьAPS противника×CD время=ПродолжительностьCD время\text{Процент снижения урона} = \frac{\text{Снижение урона}}{\text{Общий урон}} = \frac{\text{APS противника} \times \text{Продолжительность}}{\text{APS противника} \times \text{CD время}} = \frac{\text{Продолжительность}}{\text{CD время}}Процент снижения урона=Общий уронСнижение урона=APS противника×CD времяAPS противника×Продолжительность=CD времяПродолжительность ΔEHP=Исходный EHP1−ПродолжительностьCD время−Исходный EHP=Исходный EHP×ПродолжительностьCD время−ПродолжительностьΔEHP = \frac{\text{Исходный EHP}}{1 - \frac{\text{Продолжительность}}{\text{CD время}}} - \text{Исходный EHP} = \text{Исходный EHP} \times \frac{\text{Продолжительность}}{\text{CD время} - \text{Продолжительность}}ΔEHP=1−CD времяПродолжительностьИсходный EHP−Исходный EHP=Исходный EHP×CD время−ПродолжительностьПродолжительность Лечение:
Для одноразового лечения: ΔEHP=Лечение×Продолжительность выживаемостиCD времяΔEHP = \text{Лечение} \times \frac{\text{Продолжительность выживаемости}}{\text{CD время}}ΔEHP=Лечение×CD времяПродолжительность выживаемости После преобразования атрибутов навыков в APS или EHP, можно использовать формулу боевой мощи для расчёта боевой мощи персонажа. Формулы расчёта боевой мощи разнообразны, здесь приведены две наиболее распространённые.
Формула 1:
Боевой показатель=∑(Значение атрибутаi×Ценность атрибутаi)\text{Боевой показатель} = \sum (\text{Значение атрибута}_i \times \text{Ценность атрибута}_i)Боевой показатель=∑(Значение атрибутаi×Ценность атрибутаi)
Ценность атрибута можно понимать как вклад данного боевого атрибута в боевую мощь персонажа. Для определения ценности атрибутов используются различные методы, приведём один из них. Пусть ценность атрибута здоровья равна 1, ttt обозначает продолжительность выживаемости, vvv — скорость атаки, drdrdr — иммунитет к урону, hhh — урон за одну атаку, aaa — атака, ddd — защита, x1x1x1 — другие атрибуты, влияющие на урон. Тогда:
t=HPDPS=HPv×h(a,d,x1,… )⇒HP=t×v×h(a,d,x1,… )t = \frac{\text{HP}}{\text{DPS}} = \frac{\text{HP}}{v \times h(a, d, x1, \dots)} \Rightarrow \text{HP} = t \times v \times h(a, d, x1, \dots)t=DPSHP=v×h(a,d,x1,…)HP⇒HP=t×v×h(a,d,x1,…)
Вычислим частные производные HP по каждому атрибуту, влияющему на hhh:
∂HP∂a=t×v×h′(a)\frac{\partial \text{HP}}{\partial a} = t \times v \times h'(a)∂a∂HP=t×v×h′(a):
Если атакующая сторона увеличит атаку на 1 единицу, защищающаяся сторона должна одновременно увеличить здоровье на t×v×h′(a)t \times v \times h'(a)t×v×h′(a) единиц, чтобы сохранить неизменную продолжительность выживаемости. Таким образом, 1 единица атаки и t×v×h′(a)t \times v \times h'(a)t×v×h′(a) единиц здоровья имеют одинаковую ценность. Ценность атаки равна t×v×h′(a)t \times v \times h'(a)t×v×h′(a). ∂HP∂d=t×v×h′(d)\frac{\partial \text{HP}}{\partial d} = t \times v \times h'(d)∂d∂HP=t×v×h′(d):
Если защищающаяся сторона увеличит защиту на 1 единицу, она должна одновременно уменьшить здоровье на ∣t×v×h′(d)∣|t \times v \times h'(d)|∣t×v×h′(d)∣ единиц, чтобы сохранить неизменную продолжительность выживаемости. Таким образом, 1 единица защиты и ∣t×v×h′(d)∣|t \times v \times h'(d)|∣t×v×h′(d)∣ единиц здоровья имеют одинаковую ценность. Ценность защиты равна ∣t×v×h′(d)∣|t \times v \times h'(d)|∣t×v×h′(d)∣. … (Вычисления частных производных HP по другим атрибутам, что позволяет определить их ценность) Также: t=HPDPS=HPAPS×(1−dr)⇒HP=t×APS×(1−dr)t = \frac{\text{HP}}{\text{DPS}} = \frac{\text{HP}}{\text{APS} \times (1 - dr)} \Rightarrow \text{HP} = t \times \text{APS} \times (1 - dr)t=DPSHP=APS×(1−dr)HP⇒HP=t×APS×(1−dr) Вычислим частную производную HP по APS: ∂HP∂APS=t×(1−dr)\frac{\partial \text{HP}}{\partial \text{APS}} = t \times (1 - dr)∂APS∂HP=t×(1−dr) Таким образом, ценность APS равна t×(1−dr)t \times (1 - dr)t×(1−dr). Это позволяет определить ценность навыковых атрибутов, преобразованных в APS: ΔAPS×t×(1−dr)Δ\text{APS} \times t \times (1 - dr)ΔAPS×t×(1−dr) (навыковые атрибуты, преобразованные в EHP, имеют ценность ΔEHP×1Δ\text{EHP} \times 1ΔEHP×1)
Из приведённого выше примера видно, что ценность атрибутов не является фиксированной и изменяется в зависимости от таких переменных, как ttt, vvv и другие. Если использовать изменяющуюся ценность атрибутов для расчёта боевой мощи, перед каждым расчётом боевой мощи необходимо пересчитывать ценности атрибутов, что неудобно. Если использовать фиксированные ценности атрибутов, хотя расчёт будет проще, полученная боевая мощь будет неточной. Например, при подстановке выпускных значений, полученные ценности атрибутов, увеличивающих урон, будут слишком высокими. Однако на ранних этапах, когда атака игрока низка, эти атрибуты обеспечивают небольшой эффект, и использование фиксированных ценностей приведёт к завышенным показателям боевой мощи. Один из способов решения этой проблемы — разделить процесс прокачки на несколько этапов, соответствующих ключевым точкам распределения атрибутов, и определить ценности атрибутов для каждого этапа отдельно, что позволит уменьшить некоторые ошибки.
Кроме того, структура первой формулы боевой мощи также имеет недостатки. Аддитивная структура позволяет, даже если один из параметров атаки или здоровья равен нулю, при условии достаточно высокого значения другого параметра, персонаж будет иметь неплохую боевую мощь. Это явно нелогично, поскольку такие ситуации не соответствуют здравому смыслу. Из-за этих недостатков, несмотря на широкую распространённость, эта формула постепенно вытесняется другими.
Формула 2:
Боевой показатель=EHP×APS\text{Боевой показатель} = \text{EHP} \times \text{APS}Боевой показатель=EHP×APS
Пусть ttt обозначает продолжительность выживаемости, drdrdr — иммунитет к урону, тогда: t=HPDPS=EHPAPSt = \frac{\text{HP}}{\text{DPS}} = \frac{\text{EHP}}{\text{APS}}t=DPSHP=APSEHP Следовательно: Сравнение боевой мощи персонажей A и B сводится к сравнению: EHPA×APSAиEHPB×APSB\text{EHP}_A \times \text{APS}_A \quad \text{и} \quad \text{EHP}_B \times \text{APS}_BEHPA×APSAиEHPB×APSB Таким образом, можно определить боевой показатель как: Боевой показатель=EHP×APS\text{Боевой показатель} = \text{EHP} \times \text{APS}Боевой показатель=EHP×APS
Примечание: Нельзя напрямую использовать t=HPDPSt = \frac{\text{HP}}{\text{DPS}}t=DPSHP, поскольку DPS зависит не только от атакующих атрибутов атакующей стороны, но и от защитных атрибутов защищающейся стороны. Поэтому только с одной стороны атрибутов невозможно вычислить HP×DPS\text{HP} \times \text{DPS}HP×DPS.
Обычно EHP×APS\text{EHP} \times \text{APS}EHP×APS является очень большим числом, что затрудняет его сравнение. Поэтому можно определить относительный боевой показатель для упрощения понимания: Относительный боевой показатель=Боевой показательБоевый показатель базового монстра\text{Относительный боевой показатель} = \frac{\text{Боевой показатель}}{\text{Боевый показатель базового монстра}}Относительный боевой показатель=Боевый показатель базового монстраБоевой показатель Например, относительный боевой показатель равный 3 означает, что персонаж сможет выдержать бой с тремя базовыми монстрами подряд. Предположим, что боевой показатель одного босс-монстра равен 5, тогда команда из двух персонажей с относительным боевым показателем 3 сможет пройти бой.
В сравнении с первой формулой, эта формула боевой мощи более естественна и точна. Если боевой показатель персонажа A больше, чем у персонажа B, значит, продолжительность выживаемости A обязательно больше, чем у B. Значение относительного боевого показателя также более интуитивно понятно (см. выше). Кроме того, мультипликативная структура формулы обеспечивает, что ни атака, ни здоровье не могут быть слишком низкими, и боевой показатель достигает максимума, когда оба атрибута сбалансированы. Обычно предпочтение отдаётся именно этой формуле.
3.3. Дизайн классов
Ссылаясь на три шага, приведённые в разделе 1.2:
ШАГ 1: Ясное определение объекта решения
Дизайн классов должен предоставить коэффициенты преобразования для каждого боевого атрибута каждого класса относительно атрибутов стандартного "неголого" человека (стандартного человека без оружия и экипировки). Количество распределения какого-либо боевого атрибута для определённого класса = количество распределения этого атрибута у стандартного "неголого" человека × соответствующий коэффициент преобразования.
ШАГ 2: Ясное определение дизайнерских требований
Дизайн классов должен обеспечивать баланс боевой мощи между различными классами.
ШАГ 3: Решение
Основная идея состоит в том, чтобы на основе особенностей каждого класса интуитивно установить набор коэффициентов преобразования, а затем, согласно требованию "боевой показатель класса = боевой показатель стандартного 'неголого' человека", масштабировать эти коэффициенты, чтобы получить окончательные коэффициенты преобразования.
Примечание: При дальнейшем дизайне классов аналогичного типа необходимо поддерживать баланс внутри этого типа. Например, для классов, ориентированных на урон, следует поддерживать схожие значения APS, для танковых классов — схожие значения продолжительности выживаемости при столкновении с одной целью, для лечебных классов — схожие значения лечения за единицу времени (циклическое восстановление).
3.4. Дизайн монстров
Ссылаясь на три шага, приведённые в разделе 1.2:
ШАГ 1: Ясное определение объекта решения
Дизайн монстров должен предоставить коэффициенты преобразования для каждого боевого атрибута каждого монстра относительно атрибутов игрока. Значение какого-либо боевого атрибута для монстра определённого уровня = значение этого атрибута у игрока соответствующего уровня × соответствующий коэффициент преобразования. Стоит отметить, что атрибуты монстров соотносятся с атрибутами игрока, а не с распределением атрибутов стандартного "неголого" человека, поскольку большинство игроков не могут получить все атрибуты. Значение атрибутов игрока = распределение атрибутов стандартного "неголого" человека × предполагаемая средняя доля получения атрибутов игроками. Предполагаемая средняя доля получения атрибутов игроками также может быть оценена более детально, то есть оценить долю получения атрибутов из каждого канала прокачки отдельно, затем умножить на распределение по каналам и суммировать. Это упростит последующую валидацию и корректировку.
Примечание: Поскольку атрибуты игроков постоянно растут, обычно уровень монстра соотносят с уровнем персонажа. Также можно соотносить с другими уровнями в игре, если эти уровни позволяют определить значения атрибутов игроков. Например, в «World of Warcraft» уровень монстра соотносится с уровнем оценки экипировки игрока (одним из показателей боевой мощи), в «Genshin Impact» уровень монстра соотносится с мировым уровнем (прорыв мирового уровня требует прохождения определённых подземелий, поэтому мировой уровень косвенно отражает уровень боевой мощи игрока).
ШАГ 2: Ясное определение дизайнерских требований
Требования дизайна монстров заключаются в установлении соотношения продолжительности выживаемости монстров и продолжительности выживаемости игроков. Это соотношение имеет интуитивное значение: "сколько монстров может одолеть один игрок". Это соотношение можно отразить через соотношение боевых показателей, поскольку при использовании формулы 2, продолжительность выживаемости монстра / продолжительность выживаемости игрока = боевой показатель монстра / боевой показатель игрока. Также можно использовать ожидаемую потерю здоровья (процент потерянного здоровья игроком при убийстве одного монстра), поскольку ожидаемая потеря здоровья = DPS монстра × продолжительность выживаемости монстра / HP игрока = продолжительность выживаемости монстра / продолжительность выживаемости игрока.
ШАГ 3: Решение
Основная идея заключается в том, чтобы на основе особенностей каждого монстра интуитивно установить набор коэффициентов преобразования, а затем, согласно требованиям к соотношению боевых показателей / ожидаемой потере здоровья, масштабировать эти коэффициенты, чтобы получить окончательные коэффициенты преобразования.
3.5. Тестирование боя
Тестирование боя — это процесс проверки выполнения дизайнерских требований посредством внутреннего тестирования и открытых тестов, а также процесса настройки числовых значений на основе результатов тестирования.
Внутреннее тестирование обычно включает три метода: VBA-симуляция, симуляция с использованием реальной игры и AI-симуляция с большими данными.
VBA-симуляция подходит для простых боёв и является первым этапом проверки числовой модели. Симуляция с использованием реальной игры проводится на игровых прототипах, максимально приближенных к реальной игровой ситуации, и является незаменимым этапом для сложных боёв. AI-симуляция с большими данными предполагает использование высокоразвитого AI для имитации реальных игроков в большом количестве боёв и генерации обширных справочных данных, но в настоящее время применяется редко. Открытое тестирование в основном относится к тестированию на тестовых серверах игры, где данные тестирования и отзывы игроков используются для проверки выполнения дизайнерских требований и степени принятия деталей дизайна игроками, а также для дальнейшей оптимизации числовой модели. Кроме того, боевые данные и отзывы игроков после официального запуска игры также можно рассматривать как форму открытого тестирования, которая может служить определённым руководством для дизайна последующих версий игры. В некоторых случаях возможно проведение корректировок числовых значений уже запущенной игры, включая усиление или скрытое ослабление определённых параметров.
Настройка числовых значений требует большого опыта, но VBA-симуляция является навыком, который можно быстро освоить. Поэтому здесь основное внимание уделяется написанию VBA-симулятора. Основные шаги включают:
ШАГ 1: Определение классов игрока и навыков, создание массивов игроков и навыков, объявление других необходимых общих переменных.
ШАГ 2: Написание главного процесса, последовательность которого включает инициализацию → { расчет CD → проверка навыков → расчет урона → проверка смерти }, где фигурные скобки обозначают цикл. Если персонаж умирает, программа завершается командой End. Цикл должен выполняться каждые 100 мс, поскольку среднее время реакции человека составляет 300 мс, а предельное время реакции не менее 100 мс.
ШАГ 3: Написание модуля инициализации, который должен выполнять загрузку данных → очистку предыдущих боевых логов → сброс CD навыков → отображение информации о HP и MP.
ШАГ 4: Написание модуля расчета CD, который перебирает все навыки. Если время восстановления навыка равно 0, ничего не делается. Если CD больше 0, уменьшается на 100 мс. Если есть общий CD, необходимо повторно перебрать общий CD.
ШАГ 5: Написание модуля проверки навыков, который перебирает всех персонажей и их навыки. Если CD навыка равен 0 и текущий MP превышает необходимый для навыка, присваиваются значения общим переменным атакующей стороны, защищающейся стороны и навыка атаки → сбрасывается CD навыка и общий CD → переходит к модулю расчета урона → прерывает текущий цикл навыков (для одного игрока за один раунд можно использовать только один навык).
ШАГ 6: Написание модуля расчета урона. Основной процесс включает проверку попадания/критического удара (метод по слоям/метод кругового стола) → расчет урона/лечения → вывод боевого лога (например, "время, навык персонажа нанес урон цели на столько-то единиц") → расчет новых значений MP и HP. Если результат меньше 0, устанавливается HP равным 0 → отображение новых значений MP и HP. Если защищающийся персонаж умирает, в лог выводится время смерти и имя погибшего. Такие сложные шаги, как "проверка попадания/критического удара" и "расчет урона/лечения", могут быть вынесены в отдельные функции.
В модуле расчета урона перед вычислением урона необходимо определить вероятность успешного попадания атаки (попадание/блок/критический удар и т.д.). Обычно существуют два метода определения вероятностей — метод по слоям и метод кругового стола. Предположим, что в процессе расчета урона необходимо определить три вероятности: вероятность попадания 70%, вероятность блокирования 8% и вероятность критического удара 10%. Процесс определения вероятностей для двух методов выглядит следующим образом:
Фактическая вероятность промаха = 1 - 70% = 30% Фактическая вероятность блокировки = 70% * 8% = 5.6% Фактическая вероятность критического удара = 70% * (1 - 8%) * 10% = 6.44% Фактическая вероятность обычной атаки = 100% - 30% - 5.6% - 6.44% = 57.96%
Приоритет выше у вероятностей с более высоким приоритетом, и при расчёте фактических вероятностей для более низких приоритетов они уменьшаются за счёт множителей (1 - n%), чтобы оставаться ниже исходных значений. Чем ниже приоритет, тем сильнее уменьшается вероятность. Фактическая вероятность промаха = 1 - 70% = 30% Фактическая вероятность блокировки = 8% Фактическая вероятность критического удара = 10% Фактическая вероятность обычной атаки = 100% - 30% - 8% - 10% = 52%
Если вероятность промаха и блокировки увеличиваются на 1%, критическая вероятность остаётся 10%, а обычная атака уменьшается до 50%. В методе кругового стола вероятности отдельных событий не влияют друг на друга до тех пор, пока обычная атака не будет вытеснена из круга вероятностей. Если каждая вероятность увеличивается на 30%, обычная атака будет вытеснена из круга, и критическая вероятность уменьшится до 2%. При этом приоритеты сохраняются: вероятности с низким приоритетом вытесняются первыми. Метод кругового стола подходит для строгого контроля распределения вероятностей и чувствителен к изменениям значений вероятностей. Для долгосрочного распределения лучше использовать метод по слоям, позволяя более низким приоритетам иметь более широкие диапазоны значений.
4. RPG Числовые показатели — Экономика
Экономика в контексте RPG — это управление ресурсами. В RPG-играх ресурсы генерируются игровыми модулями (плеймодулями) и расходуются через модули прокачки, образуя полный замкнутый цикл ввода/вывода (I/O). Целью проектирования экономических числовых показателей является планирование потребления и производства ресурсов в игре, а также создание системы ценностей для оценки стоимости различных ресурсов. Основные шаги дизайна следующие:
ШАГ 1: Определение структуры потоков ресурсов
Определите, какие ресурсы потребляются каждым каналом прокачки и какие ресурсы производятся каждым игровым модулем. Создайте схему потоков ресурсов или черную точку для визуализации структуры.
ШАГ 2: Детализация числовых значений модели потребления
Определите кривые потребления для каждого потребляемого ресурса в каждом канале прокачки. С учетом запланированного темпа роста, описанного в разделе 2.1, рассчитайте ежедневное потребление каждого ресурса.
ШАГ 3: Детализация числовых значений модели производства
Определите распределение производства каждого ресурса между различными игровыми модулями. С учетом ежедневного потребления, рассчитанного на втором шаге, определите ежедневное производство каждого ресурса в каждом игровом модуле, а затем с учетом количества игровых сессий в день рассчитайте конкретные значения производства за одну игровую сессию.
ШАГ 4: Создание системы ценностей ресурсов
Используйте ценность ресурсов как мост между боевой эффективностью и временными затратами, чтобы установить показатель рентабельности прокачки, показатель рентабельности игрового модуля и потенциальную глубину микротранзакций.
Перед проектированием экономических числовых показателей необходимо также уточнить тип экономики игры. Распространённые типы экономики следующие:
Плановая экономика: Позволяет игрокам торговать только с системой. Недостаток — низкая интерактивность между игроками, что снижает социальные аспекты игры. Подходит для однопользовательских игр, таких как «Genshin Impact». Рыночная экономика: Позволяет свободную торговлю между игроками, при этом система не участвует. Недостатки — риск обвала цен и быстрого истощения игровых ресурсов, что способствует возникновению черного рынка, требующего высокого уровня контроля от разработчиков. При обвале цен игроки быстро покидают игру, и продолжительность жизни игры значительно сокращается. Вряд ли найдётся игра, полностью основанная на рыночной экономике. Плановая экономика + Рыночная экономика: Позволяет игрокам торговать между собой, но система осуществляет макро-контроль. Обеспечивает определённую интерактивность и снижает риски по сравнению с чистой рыночной экономикой. Подходит для большинства MMORPG, например, «Dreamland Journey». Если экономика игры чисто плановая, следует построить таблицы согласно вышеописанному подходу. Если добавляется рыночная экономика, необходимо уделить особое внимание следующим двум задачам:
Активизация торговли между игроками:
Хотя в игре естественным образом происходит торговля (например, игроки с большим количеством базовых материалов могут продавать их игрокам с ограниченным временем, а игроки высокого уровня могут продавать избыточное оборудование игрокам низкого уровня), дизайнеры могут дополнительно активизировать торговлю через усложнение производственной стороны. То есть, создать множество способов производства, которые игроки не смогут освоить одновременно, и вынудить их торговать ресурсами для их получения. «Dreamland Journey» использует такой подход с системой трансмутации, а «Genshin Impact» — с системой артефактов, где вероятностный дизайн позволяет стремление к практически безграничным числовым показателям и значительно углубляет прокачку.