Таблицы трофеев

Во многих играх есть трофеи. Обычно они выпадают из противников случайно. Это типовая механика, но почти каждый разработчик игр сталкивается с определёнными трудностями. И я хочу представить вам эффективные способы решения задачи. Здесь несколько способлв, которые являются наиболее успешными, и с которыми мне пришлось столкнуться за прошедшие годы. Хочу поблагодарить всех, кто помог в них разобраться.

Основная таблица трофеев

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

Пример
Таблица трофеев
предмет:
название: меч
вес: 10
предмет:
название: щит
вес: 40
предмет:
название: нулевой предмет
вес: 50

Терминология

  • Предмет: предмет, который можно дать игроку.
  • Таблица трофеев: набор предметов заносится в таблицу трофеев. Это является своего рода корзина с предметами. Например, таблица трофеев может включать в себя: меч, щит, нулевой предмет.
  • Шанс выпадения (вес, весовой коэффициент): у трофея может быть вес от 1 до 10.000. Например, шанс выпадения меча может быть равен 10.
  • Нулевой предмет: один из предметов находящийся в таблице является «нулевым», это означает, что если происходит случайное распределение предметов, то игрок не получает ни одного трофея.

Вероятность получения трофея

  • Суммарная вероятность: во-первых, сложите общий вес всех трофеев в таблице. В примере, который был приведен выше, общий вес предметов в таблице составляет 10+40+50 = 100. Но он не должен быть обязательно равен 100, так как это не проценты.
  • Затем определите для каждого предмета свой диапазон. Меч = от 1 до 10, щит = от 11 до 50, нулевой предмет = от 51 до 100.
  • Создайте случайное число от 1 до 100.
  • Проверьте, в какой из диапазонов входит получившееся число. Это и есть трофей, который вы получите.
  • Повторный бросок: создайте случайные числа, чтобы имитировать броски кубиков.
  • Итак, какие у игрока есть шансы получить какой-то определённый трофей? Шанс, что выпадет меч, равен 10%, шанс получить щит 40%, и вероятность, что не выпадет ничего — 50%.

    Как разработчик игры, я могу изменить весовой коэффициент нулевого предмета и сделать его равным 100, и теперь вес меча будет 6.6% (10/150), щита — 26% (40/150), и шанс ничего не получить будет 66% (100/150).

    Сходство с другими распространенными системами случайных событий

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

    Игральные карты

    Представьте колоду карт, которую можно перетасовать и вытянуть карту.

    • Каждый тип карт в колоде — предмет.
    • Число карт данного типа — вес предмета.
    • Перетасовка колоды эквивалентна закреплению за каждым предметом определенного диапазона и созданию случайного числа.
    • Вытянуть карту, это то же самое, что выбрать предмет, который выпал.

    Обычная колода состоит из 52 карт, но с таблицей трофеев такое ограничение отсутствует. В колодах могут быть тысячи карт и большой набор разных типов карт. Также колоды могут быть маленького размера, похожие на обычные комбинации карт в покере.

    Кубики

    Игральные кости также могут представлять собой таблицу трофеев.

    • Каждая игральная кость, это таблица трофеев.
    • Стороны игральной кости (от 1 до N) это трофеи (от 1 до N).
    • Каждая сторона игральной кости имеет вес равный «1». (Если не используются шулерские игральные кости)
    • Несколько игральных костей может быть представлено как многократное создание случайного числа. Таким образом, 2D6 (2 броска шестигранных кубиков), равнозначно 2 броскам для таблицы трофеев 6 предметов.

    Варианты:

    Теперь, когда определена основная таблица трофеев, какие же ещё функции она может выполнять?

    Наборы предметов

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

    Пример Таблица трофеев
    предмет:
    название: меч
    вес: 10
    предмет:
    название: щит
    название: лечебное зелье; количество: 2
    вес: 40
    предмет:
    название: нулевой предмет
    вес: 50

    Всегда выпадающий трофей

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

    Повторяющаяся случайность

    Иногда вам хочется повторить случайный бросок. Например, когда игрок сохраняет игру и затем перезагружает её, чтобы не получить плохой трофей, который может выпасть. Если будет лазейка в правилах, позволяющая обмануть игру, то большинство игроков с радостью этим воспользуются.

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

    Случайное распределение предметов без замены

    Проблема данной системы заключается в том, что существует вероятность, что игрок всегда будет получать нулевой предмет, и игроки часто жалуются на это: «Я переигрывал бой 3000 раз и ни разу не выбил Золотое супер-ружьё!». И ведь это вполне может случиться.

    По статистике, существует два основных метода отбора:

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

    Например, Тетрис (http://tetris.wikia.com/wiki/Random_Generator) использует отбор без замещения. Каждый набор фигур Тетриса находится в таблице трофеев. Каждый раз, когда вы получаете новую фигуру, она автоматически убирается из таблицы. Данный способ гарантирует, что вы обязательно получите фигуру "I"("палку«), если конечно у вас хватит терпения.

    Давайте рассмотрим, как можно произвести случайное распределение предметов без замены в таблице трофеев.

    • Когда вы делаете бросок и вытаскиваете предмет, то его вес уменьшается на 1. И в результате, соответствующий этому предмету диапазон и максимальный диапазон также уменьшаются на 1.
    • Изменённая таблица трофеев сохраняется для следующего броска.

    Гарантированный способ получить специальный трофей

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

    Небольшой шанс гарантированно получить что-либо — это не то же самое, что медленное повышение шанса получить желанный предмет при многократных переигровках.

    Вот как можно сделать гарантированное получение трофеев.

    • Когда при броске вы получаете негарантированные предметы, то вес всех таких предметов сокращается на X%
    • X = 100 / максимальное число бросков, до получения гарантированных предметов.
    • Изменённая таблица трофеев сохраняется для следующего броска.

    Пример

    • Допустим, вам нужно, чтобы меч выпадал каждый 5-й раз, даже если шанс что он выпадет, равен всего 10%.
    • Таким образом, X = 100 / 5 или 20%.
    • Итак, каждый раз, когда вы не получаете меч, вес щита снижается на 8 (40*0.2), а вес нулевого предмета на 10 (50*0.2).
    • После 5 броска вес всех оставшихся трофеев будет равен 0, и шанс получить меч будет 100%.

    Иерархические таблицы трофеев

    Таблицы трофеев в большинстве является источник новых ресурсов. Однако можно довольно легко столкнуться с ситуациями, когда вы получаете слишком много, или наоборот слишком мало каких-то определенных ресурсов, поэтому некоторые ограничения были бы полезны.

    Решение данной проблемы заключается в том, чтобы использовать иерархические таблицы трофеев без замены. Когда определенные ресурсы заканчиваются, игрок больше не может их получать. Мы использовали этот подход для ежедневных денежных наград. Было решено, что игрок будет получать не более 100 монет в день, и это будет частью системы трофеев.

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

    Пример
    Таблица трофеев: награды
    предмет:
    название: меч
    вес: 10
    предмет:
    название: ежедневное денежное вознаграждение
    вес: 40
    предмет:
    название: нулевой предмет
    вес: 50

    Таблица трофеев: ежедневное денежное вознаграждение
    тип: без замены
    Частота обновления: ежедневно
    предмет:
    название: монета, количество: 1
    вес: 10
    предмет:
    название: монета, количество: 10
    вес: 4
    предмет:
    название: монета, количество: 50
    вес:1

    В примере, который был приведён выше, шанс получить монеты равен 40%. Таблица ежедневных вознаграждений показывает, что в день максимально можно выиграть 100 монет, 10 наград по1 монете, 4 награды по 10 монет и 1 награда по 50 монет.

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

    Условное выпадение трофея

    Иногда хочется проверить могут ли выпасть предметы, основанные на некой внешней переменной. В игре Realm of the Mad God мы хотели избежать, того чтобы игроки получали трофеи за убийство главного противника, просто так, не нанося ему ни малейшего урона. И для этого в таблицу трофеев мы добавили условия получения трофеев. Когда выпадет ценный трофей из таблицы, сразу проверяется, достаточно ли урона игрок нанёс противнику, чтобы получить данный трофей.

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

    Модификаторы

    Также можно изменить количество или вес выпадающих трофеев на основании внешней логики. Например, игрок с навыком сбора трофеев может получить в 2 раза больше определённого предмета, чем игрок, у которого данный навык отсутствует. Также можно изменить вес трофея. Высокий уровень героя снижает вес всех низкоуровневых трофеев на 50%. (Благодарю комментатора на сайте Reddit за эту идею)

    Другие применения

    Подобные таблицы обычно используются для системы получения трофеев. Но можно найти им и другое применение.

    • Процедурная генерация: использует таблицы для создания оружия или героев из компонентов
    • Искусственный интеллект: использует таблицы для выбора действия, например, такие как атака или передвижение.

    Конечно, это может показаться немного глупым, ведь есть более хорошие способы создать искусственный интеллект! Однако можно сказать, что случайность, это очень грубая модель первого порядка любой системы. Каким же образом мозг человека моделирует систему? Мы наблюдаем за системой, и отмечаем частоту и тенденцию повторяющихся явлений. Только спустя продолжительное время становится ясно «почему» что-то происходит, или какова причинно-следственная связь между двумя явлениями.

    В физике мы часто шутим что, для создания коровы, сложного биологического организма, сначала нужно «представить сферическую корову». Создавая более простой вариант модели, часто можно получить полезную информацию малой ценой. .

    Очень часто таблица трофеев является довольно хорошим человекоцентристским приближением сложной системы. Для многих систем, большинство игроков никогда не выйдут за пределы такой модели, и поэтому создание более сложной системы это пустая трата времени. Рациональная разработка игры — это задача создать элементы на минимально требуемом уровне.

    Например, система D&D моделирует целый мир методами похожими на таблицы трофеев. Это было сделано специально, чтобы сократить число систем, которые были во многих случаях просто вторичными дополнениями главной ролевой игры.

    Таблица выпавших трофеев не единственная вещь, которая необходима, но в большинстве игровых сценариев её вполне достаточно.

    Процедурная генерация мысленного эксперимента

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

    Предположим, вы хотите создать процедурно-генерируемого противника.

    • Начните с создания уникальных особенностей противника. Возможно, противник будет обладать определенным типом передвижения, типом атаки, защитным положительным эффектом (баффом) и типом сокровищ.
    • Создайте таблицы трофеев для каждой особенности.
    • Создайте для каждой особенности в таблице свой уровень силы, в зависимости от того насколько сильной она должна быть. Например, сила атаки ножом, может быть всего лишь 5, а сила атаки большим молотом 15.

    Создайте ещё одну таблицу положительных эффектов. В этой таблице будут модификаторы для различных характеристик. Например, эффект «Сила» увеличивает силу атаки на 20%. Также могут быть отрицательные эффекты (дебаффы). Например, эффект «Слабость» может уменьшить силу атаки на 50%.

    Теперь создадим противника.

    • Установите значения: установите значения силы для созданного противника. Предположим, вы хотите создать противника с силой 40.
    • Случайные особенности: сделайте бросок для определения каждой особенности и добавьте результат в список.
    • Подсчет силы: сложите силу всех способностей.
    • Корректировка: если суммарная сила всех способностей слишком большая, добавьте отрицательный эффект или повторите бросок для получения более слабой особенности. Если суммарная сила слишком маленькая, добавьте положительный эффект или повторите бросок для более сильной особенности.
    • Повтор: повторяйте предыдущее действие до тех пор пока не получите необходимую погрешность относительно требуемой силы (40), или пока не потратите желаемое число итераций.

    Теперь у вас есть противник, созданный при помощи данных методов. Можно добавить множество улучшений к этой базовой системе, но она и так работает. В качестве упражнения подумайте над следующими возможностями:

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

    Заключение

    Каждый раз при обсуждении системы на основе случайностей возникает большое количество второстепенных вопросов. Ниже приведены статьи, которые я советую почитать:

    Не будьте категоричными относительно системы на основе случайностей. Будьте мудрыми разработчиками, чей эстетический выбор основан непосредственно на исследовании. Существует хорошее правило, не критиковать метод проектирования, пока не проверите его на практике в нескольких играх.

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

    Оригинал

    Оглавление


    Добавить отзыв

    Меня зовут:
    Моя почта:
    Отзыв:
    Заполняя заявку, я лично принимаю решение о предоставлении своих персональных данных и даю согласие ООО "ОГОГО" на их обработку свободно, своей волей и в своем интересе с целью приобретения товара. Подтверждаю, что моё согласие на обработку персональных данных дано конкретно, информированно и сознательно. Мною изучена Политика ООО «ОГОГО» в отношении обработки персональных данных, и я принимаю её условия.
    Николай
    11 января 2016
    Довольно кривой перевод..... тяжело понимать, о чем идет речь =(

    Перезвоните мне

    Мой кабинет

    Восстановить пароль

    Электронная почта

    Мой город:

    Пароль отправлен

    Письмо с новым паролем отправлено на указанную почту

    Спасибо!

    Ваш комментарий отправлен

    Спасибо!

    Мы вам перезвоним

    Отправляем ссылку на почту:

    Моя почта:
    Мы отправим только ссылку и ничего кроме ссылки

    Ссылка отправлена

    Письмо с ссылкой отправлено на указанную почту

    Магазины во Владимире