Представление значений урона в Diablo III

Представление значений урона в Diablo III

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


Итак, числа — как все это работает?

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

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

В обновлении 2.4.0 появилось несколько новых возможностей, которые должны были решить эту задачу. Во-первых, в настройках игры теперь можно выбрать режим отображения значений урона в сокращенном формате с использованием аббревиатур. Во-вторых, теперь самые высокие значения урона отображаются другим цветом и сразу привлекают к себе внимание. Каждое из этих нововведений в реализации оказалось далеко не таким уж и простым: многие варианты были не слишком удачными с точки зрения игрового дизайна; от нас требовалось учитывать все тонкости, связанные с локализацией, ну и, разумеется, итоговый результат должен был быть приятен глазу.

Первоначально мы хотели выделять цветом верхние 5% значений урона, нанесенного вашим героем за последние несколько секунд. Однако этот подход оказался не слишком удачным, поскольку существует масса вариантов развития всех классов, и каждый из них имеет свою уникальную схему распределения наносимого урона во времени. Одни специализации выдают высокие значения урона за небольшие промежутки времени, другие поддерживают более-менее стабильный постоянный урон. Кроме того, этот первоначальный подход не принимал в расчет возможные ожидаемые флуктуации урона. Например, столп силы на некоторое время значительно усиливает наносимый героем урон. Но после того как его действие закончится, игрок все равно должен получать информацию о том, что какое-то из его умений нанесло особенно высокий урон — а при таком подходе эти значения неизбежно остались бы «за кадром».

Мы постоянно совершенствовали наш алгоритм, в котором все эти аспекты должны были быть учтены, и в итоге выработали следующий набор условий для отображения значений урона отдельным (оранжевым) цветом:

  • Значения урона должны превышать 10000 единиц.
  • Если значение урона, которое должно быть отображено, превышает предыдущее «оранжевое» значение, новое значение также отображается оранжевым цветом.
  • Самое большое значение урона в памяти системы каждую секунду теряет 3% от своей величины.
    • Это уменьшает вероятность возникновения ситуации, когда вы на протяжении длительного промежутка времени не видите выделенных высоких значений урона.
  • Первые 10 высоких значений урона сбрасываются.
    • Это позволяет системе осуществить автокалибровку.
  • Если в течение 10 секунд герой не нанес урона, система возвращает все в исходное состояние.


Где мои миллиарды? — Трудности перевода

Если вы уже играли в Diablo III после выхода последнего обновления, возможно, вы уже видели аббревиатуры в значениях урона. Многие игроки (преимущественно англоговорящая аудитория) спрашивали нас, почему мы измеряем урон в миллионах, но не используем аббревиатуру для миллиардов.

Тому есть несколько причин, но основная из них — тонкости локализации. Diablo III — это глобальный феномен; игра издается на 13 различных языках, поэтому, когда мы принимаем решение в области дизайна, которое как-то затрагивает написание любого слова (а в данном случае формат отображения чисел), мы должны четко представлять себе, как это изменение будет выглядеть во всех версиях игры. И если вы думаете, что нет ничего проще, чем переводить числа на другие языки, то вы глубоко заблуждаетесь.


Слева: отображение чисел в английской версии игры. Справа: отображение чисел в корейской версии игры.

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

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

Дополнительные сложности вносит и пунктуация. Не во всех языках в качестве разделителей в числах используются запятые. В Европе, например, распространено использование в качестве разделителей точек вместо запятых; в некоторых языках разделители не используются вообще.


Слева: количество золота в корейской версии игры. Справа: количество золота во французской версии игры.

Числа в Diablo III становились все более громоздкими, и мы решили ввести пунктуацию, но нам нужен был способ, позволявший корректно использовать пунктуацию во всех локализованных версиях игры. В нашем программном коде используется библиотека ICU — International Components for Unicode. Это исключительно полезный инструмент для локализации программного обеспечения. ICU имеет множество применений, но в нашем конкретном случае мы воспользовались поддерживаемой ею возможностью взять любое число и региональные стандарты (например, американский английский, французский или корейский языки) и получить на выходе число, отформатированное в полном соответствии с этими региональными стандартами (включая знаки пунктуации). Наш отдел локализации также сверяется со специальной таблицей, в которой сведена информация о том, какой формат отображения чисел принят в каждом из регионов и как должен выглядеть конечный результат.


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

В различных локализациях аббревиатуры используются в большей или меньшей степени; преимущественно это происходит из-за культурных особенностей. Существует определенная психологическая связь между длиной отображенного значения урона и степенью удовлетворенности игрока, который видит его; здесь свою роль играют и вышеупомянутые культурные особенности, и индивидуальные особенности восприятия. Так, например, в английской версии игры мы решили не сокращать значения порядка нескольких миллионов, потому что число «1,000,000» смотрится гораздо солиднее, чем «1М». Кстати, отказавшись от аббревиатуры для биллиона (миллиарда), мы, можно сказать, одним выстрелом убили двух зайцев, поскольку, опять же, «1,000М» выглядит куда солиднее, чем всего лишь «1B». Разумеется, помимо размера отображаемых чисел мы должны были принять в расчет и ряд других факторов: визуальное представление, цвет, движение — все это очень важно.


Всплывающие значения — шлифовка визуальных эффектов

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

Только взгляните на этот шикарный крит!

Один из способов наглядно представить эту информацию — просто использовать другой цвет. Однако мы обсуждали множество различных вариантов отображения значений особо мощных ударов. Может быть, взять более крупный шрифт? Изменить траекторию движения всплывающего значения? Задействовать эффект мерцания? Увеличить задержку перед исчезновением числа с экрана? Или же просто отображать эти числа другим цветом? Как понять, какой из этих вариантов является оптимальным?

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

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

Когда речь заходит об изменении цветов в нашем интерфейсе, у наших художников есть возможность «поиграться» с тремя параметрами: тон, насыщенность и светлота. Это координаты так называемого цветового пространства HSL, общепринятого цифрового представления цветового круга.  Когда мы хотим вызвать у игроков определенные эмоции или получить новую реакцию, добиться этого можно, варьируя соответствующий параметр. Нужно изменить настроение? За это отвечает тон. Если мы, например, хотим сделать какое-то изображение менее сочным, следует уменьшить насыщенность. Нужно привлечь внимание к какому-то объекту или, наоборот, отодвинуть его на задний план? Это достигается манипуляциями со светлотой.

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


И, наконец, все вместе

Когда речь заходит о команде создателей Diablo III, большинство игроков в первую очередь видит разработчиков, занимающихся балансом классов, изобретением новых предметов и реализацией в игре новых интересных возможностей. Именно эти аспекты игры находятся на виду и оказывают наибольшее влияние на игровой процесс. Однако Diablo III — это не только экипировка вашего героя, и не только умения в его арсенале. Наши художники, инженеры, локализаторы и другие специалисты проделывают огромную работу над тем, чтобы игра выглядела безукоризненно для всех наших игроков по всему миру.

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