Достижение разблокировано
Какой звук может претендовать на звание самого счастливого в мире? Звон монет, падающих в металлический лоток игрального автомата, когда вы срываете джек-пот? Последний школьный звонок, возвещающий о начале лета? Овации толпы, когда ваша команда выигрывает матч?
Несомненно, все это прекрасные звуки, но лично я считаю, что самый счастливый звук - это тот, который звучит примерно четыре миллиона раз в день по всему миру - звук уведомления, который издает ваш Xbox, когда вы зарабатываете новое достижение. Да, это тот же самый звук, который вы слышите, получая сообщения от друзей или приглашение на игру, но эти вещи делают этот звук только еще счастливее.
А вы знали, что сообщение "Achievement unlocked" (Достижение разблокировано) и этот счастливый звук, который идет вместе с ним, были добавлены фактически в последнюю минуту перед выпуском Xbox 360?
Мне посчастливилось быть первым разработчиком системы достижений, и я написал хороший кусок кода профиля, который выполняется на Xbox и сегодня. В этой статье я поделюсь некоторыми деталями о создании системы достижений Xbox 360 и расскажу, как она работает.
Создаем хорошую вещь
Одним из ключевых преимуществ Xbox LIVE является то, что у вас есть удостоверение, которое остается одним для всех игр. До этого, до выхода Xbox 360, ваше удостоверение было просто вашим тегом игрока. Но с Xbox 360 включили в это понятие информацию об играх, в которые вы играете, тип вашего игрока (вашу игровую зону), вашу общую репутацию (звезды на вашей игровой карточке), личные настройки (такие как предпочитаемые настройки вашего контроллера) и, конечно же, ваши достижения.
Я помню свою первую встречу с командой Xbox. Небольшая группа собралась вокруг длинного стола в темном конференц-зале в старом офисном здании. Это была не та отполированная и профессиональная Microsoft, к которой я привык. В приглашении на встречу было сказано, что мы собрались для обсуждения планов относительно системы "цифровой идентификации" для грядущей новой консоли. Это звучало не так хорошо, но как только я сел за этот стол, я был тут же привлечен тем, с какой страстью эта группа разработчиков говорила об этой функции. Я сидел слева от Major Nelson (ник Ларри Грибба, главы службы Xbox Live - прим. Пер.), которого люди называют просто "майором" и думал "Это потрясающее имя". К счастью, позже я понял, что это просто кличка. (Надеюсь, он никогда не прочитает эту статью)
Одной из жарких тем для обсуждения, присутствовавших на той встрече, было стремление сделать профили доступными из оффлайна. Это означало, что игроку не нужно было быть подключенным к Xbox Live, чтобы получить доступ к его достижениям или настройкам профиля. Основной идеей было мысль, что "У меня должна быть возможность взять свой Xbox с собой на выходные в отель в Уистлере, и перенести все достижение, которые я заработают за это время в свой онлайн-профиль, когда я в понедельник зайду в сеть из дома!". Жизнь была бы намного проще, если бы отели в Уистлере предлагали бесплатный доступ в Интернет, но, вместо этого, оффлайновый доступ мог бы стать важной функцией профиля. Мало того, что вы могли не заходить в сеть на протяжении выходных, вам еще и не нужно было волноваться о том, что вы можете потерять соединение с Интернет до того, как достигните важной точки в игровом процессе. Или вы могли играть, вообще не подключаясь к Xbox Live, заработать кучу достижений, после чего выложить их всех на "облако" во время первого подключения к службе. Оффлайновый доступ стоил команде разработчиков несколько бессонных ночей, но мы знали, что это будет хорошая функция, чтобы решиться ради нее на сверхурочные.
Это лишь один из сотен элементов, составляющих данную систему. Я могу долго рассказывать о различных особенностях этого проекта, но давайте немного прервемся и посмотрим, как все это работает.
В игровой студии
Когда проектировщик работает над игрой, он или она должны сообщать системе Xbox некоторые подробности об этой игре, например, о введенных в игре достижениях, способе организации совместной игры, информационных сообщениях (например "Гонки на трассе Laguna Seca") и т.д. Эта информация помогает консоли и службе Xbox Live делать настройки специально для этой игры.
Начиная с момента выхода Xbox 360, игровая информация определялась с помощью инструмента из Game Development Kit (GDK) под названием XLAST (Xbox LIVE Authoring and Submission Tool). XLAST записывал игровую информацию в файл XML, называемый файлом XLAST (мы весьма творчески подходим к выбору имен файлов, не так ли?)
Файл XLAST впоследствии запускался через другой инструмент, который проверяет правильность XML кода и реализует такие вещи, как число определенных достижений, количество игровых очков, присуждаемых игрой, и т.д. Например, вот некоторые из существующих ограничений:
Если все эти условия выполнены, на выходе получим два файла: файл заголовка и SPA-файл. Так как этот инструмент компилирует XLAST в SPA, он известен как SPA-компилятор, или SPAC для краткости.
Файл заголовка используется C и C++ - языках программирования, чаще всего используемых для написания игр. Этот файл определяет, помимо прочего, уникальные идентификаторы, которые используются для обращения к определенным достижениям. Подробнее об этом я расскажу ниже, когда мы поговорим о том, как игры присуждают достижения.
Файл SPA - это компактное, двоичное представление файла XLAST. SPA - это акроним от слов Statistics (Статистика), Presence (Присутствие) и Achievements (Достижения). В этом файле есть и другие понятия, но эти три являются среди них наиболее важными, да и "SPA" произносить намного легче, чем "SPAPCXYZZY". Файл SPA связан с исполняемым двоичным файлом игры так, чтобы при запуске игры системное программное обеспечение Xbox могло извлечь данные SPA из исполняемого файла и преобразовать их во внутренние структуры для дальнейшего их использования.
Внутри вашей Xbox
Когда игра хочет присудить достижение, она вызывает функцию GDK XUserWriteAchievements:
// Achievement ids are defined in spa.h, created by SPAC from the XLAST file
rgAchievements[dwNumAchievements].dwUserIndex = dwUserIndex;
rgAchievements[dwNumAchievements].dwAchievementId = ACHIEVEMENT_PLAYED10GAMES;
dwNumAchievements++;
rgAchievements[dwNumAchievements].dwUserIndex = dwUserIndex;
rgAchievements[dwNumAchievements].dwAchievementId = ACHIEVEMENT_PONG_A_THON_I;
dwNumAchievements++;
dwResult = XUserWriteAchievements(
dwNumAchievements, // Number of structs in pdwAchievements
pdwAchievements, // Achievement/user tuples to set
&xov); // Async status
Описанные выше параметры определяют список достижений и то, каким игрокам они должны быть присуждены. Большинство игр за один раз присуждают одно достижение, однако возможно присудить сколько угодно достижений (хоть сразу все, какие есть у игры) за один вызов функции. Естественно, вы должны быть очень хороши, чтобы сделать это. Уникальные идентификатор inpdwAchievements были определены в XLAST и выведены в файл заголовка компилятором SPA.
Внутри функции XUserWriteAchievements, система Xbox просматривает, какие достижения у игрока уже есть и, если хоть один из перечисленных идентификаторов принадлежит новому достижению, она записывает информацию о нем в профиль игрока и выдает сообщение "Достижение разблокировано" (вместе с самым счастливым звуком в мире).
Пока что мы смотрели только на то, что происходит на одной консоли, но как происходит сравнение достижений? Или восстановление учетной записи? Или просмотр профиля на xbox.com? Для всех этих вещей нам потребуется поддержка службы Xbox Live.
На облаке
Ранее, когда разработчик игры создавал и компилировал файл XLAST, он также отсылал этот файл службе Xbox Live. Служба профилей Xbox Live обрабатывает файл XLAST для каждой игры, так что ей известны все детали о каждом достижении. Благодаря этому вы можете просматривать достижения на xbox.com или сравнивать ваш профиль с чьим-то еще и просматривать подробности о достижениях для игр, в которые вы никогда не играли. Имена и описания достижений могут быть переведены на множество различных языков, и эта служба достаточно умна, чтобы предоставить вам текст на вашем языке, если он доступен. Эти переводы также были определены в XLAST файле разработчиком игры.
Теперь у нас есть консольный профиль, который может быть записан в любое время, и облачная служба, которая знает о каждой игре и ее достижениях. Мы уже почти готовы, чтобы поехать покататься на лыжах в Уистлере. Последнее, что нам осталось - это синхронизация локальной копии вашего профиля с той копией, которая хранится в службе. Любая запись в вашем профиле, например, о присуждении достижения, специальным образом помечает профиль так, чтобы при следующем вашем входе в Live (или спустя примерно 30 секунд с момента внесения записи, если вы уже подключены к Live) измененные данные будут отправлены службе и объединены с сохраненным там вашим профилем. Это означает, что вы можете взять вашу консоль с собой на выходные, заработать столько достижений, сколько захотите, и, когда вы обратно подключите консоль к сети, эти достижения будут автоматически отосланы службе, чтобы весь мир смог их увидеть.
Если вы выключите вашу консоль до того, как произойдет синхронизация профиля, вы не сможете увидите ваши достижения на xbox.com. Что еще важнее, ваши друзья не смогут увидеть ваши достижения, просматривая ваш профиль! Синхронизация происходит довольно быстро и полностью автоматически, до тех пор, пока вы подключены к Xbox Live. Иногда мое подключение пропадает, поэтому, чтобы убедиться в том, что все могут восхититься моим игровым мастерством, когда я вижу сообщение "Достижение разблокировано", я нажимаю кнопку Xbox на контроллере и возвращаюсь в меню. Я перехожу напрямую на экран достижений, так что я могу видеть подробности моего последнего завоевания. В этом меню я могу также проверить, подключен ли я в данный момент к Live, и восстановить соединение, если оно пропало. Затем я возвращаюсь к игре, будучи уверенным в том, что когда мои друзья будут просматривать мой профиль, они увидят мой новый трофей. Все это вовсе не обязательно, но если вы хотите полностью удостовериться в том, что вы синхронизированы с Live, вы можете дважды проверить ваше соединение перед тем, как выключить консоль. Но помните - синхронизация происходит полностью автоматически, и мы никогда не попросим наших прекрасных пользователей производить синхронизацию вручную.
Время для истории
А теперь давайте я расскажу вам некоторые "закулисные" истории, из которых вы узнаете о том, как эти система работает в целом.
Развитие
У достижений было трудное детство, причем это касается как технологии, так и принятия общественностью. По поводу того, что касается технологии, я дам лишь один совет любому, кто работает над похожей системой: если вы хотите остаться в хороших отношениях с вашим начальником, убедитесь, что все его достижения в Need for Speed будут отображены в сети. Если пропадет хоть одно из них, вы обязательно услышите об этом. ("Извини, Бен!")
Больше всего усилий потребовали принятие технологии и создание лучших ее применений. Во-первых, достижения были не очень хорошо приняты проектировщиками игр, и мы не предоставляли для первых игр хорошего руководства для того, как лучше всего использовать эту систему. Из-за этого ранние реализации достижений были непоследовательны и не так хороши, как могли бы. Некоторые игры удовлетворяли лишь минимальным условиям: 5 достижений, каждое из которых выдавались уже в самом начале игры. В некоторых играх завоевать достижения было либо очень сложно, либо очень легко. Наша команда поддержки разработчиков проделала превосходную работу по созданию руководства, состоявшего из 21-ой страницы, 8000 слов для описания лучших применений для достижений. После этого разработчики поняли, что достижения являются превосходным мотиватором для того, чтобы пользователи захотели исследовать новые области их игры, или даже пройти ее снова.
Представленные выше значки символизируют эволюцию достижений. Первый из них является самым первым знаком достижений. Я создал его для моей тестовой игры еще до того, как я написал первые строчки системного кода. Забавный факт: это также одно из первых дополнительных изображений игрока, но это уже история для другой статьи. Второй значок является изображением, которое игра Project Gotham Racing использует для ВСЕХ ее 20 достижений. Забавно, но даже игры, созданные Microsoft, не использовали всех возможностей системы. Последний значок относится к игре Gears of War 2, у которой есть красивые, различные иконки для каждого из 50 ее достижений. Мы прошли очень долгий путь.
Мы гордимся теми разработками, которые вы можете увидеть практически в любой игре. У вас есть единый список друзей, каждая игра поддерживает голосовой чат и т.д. Но нам также нравится предоставлять разработчикам игр поле для экспериментов. Эта идея лежала в основе решения, согласно которому мы не стали каким-либо образом обозначать момент, когда присуждается новое достижение. Кто-то считает, что игре не надо показывать каких-либо всплывающих сообщений в разгар виртуальной битвы, и разработчикам игр хотелось бы использовать их собственное визуальное оформление для представления достижений. Другие высказывались в пользу большей общности и уменьшения объема работы для разработчиков. В итоге мы добавили всплывающее уведомление и этот счастливый звук, что сейчас кажется верным решением, однако долгое время это было совсем не очевидно.
Когда конец вовсе не конец
Для многих часто оказывается неожиданностью, что игры могут получать новые достижения уже после их выхода. Это характерно для больших игр, таких как Halo или Gears of War, когда для них добавляются новые игровые опции через обновления или скачиваемый контент, и разработчики часто хотят соблазнить людей на приобретение этого нового контента добавлением новых достижений.
Когда игра выходит, система просматривает не только ресурсы игры, но и все пакеты скачиваемого контента для создания последнего, наиболее полного списка достижений. Система копирует этот список в ваш профиль, так что вы можете просматривать достижения в любое время, даже если вы возьмете свой профиль с собой, когда пойдете поиграть к другу. Любые достижения, добавленные с момента вашей последней игровой сессии будут добавлены в ваш профиль, так что, когда вы просматрите ваш профиль, вы увидите новые, незаработанные достижения.
Вы также можете увидеть новые достижения, если вы сравниваете их список с кем-то в сети. Xbox Live всегда знает последний список достижений, так что она покажет вам его, даже если вы не обновите игру или не скачаете какой-либо дополнительный контент. Сравнение игровых достижений не копирует новые достижения в ваш профиль, так что вы увидите их, только если сравните ваш список с чьим-то другим, но не при простом просмотре вашего собственного профиля.
Эти новые достижения хороши тем, что они предоставляют игровым разработчикам большую гибкость в представлении нового контента и создании его столь же функциональным, как и оригинальная игра. Но эта функция также может преподнести сюрприз. Возможно, вы заработали все возможные достижения, но зайдя в игру на следующий день, мы можете обнаружить новые. Вы прошли игру на 100%, но теперь это не так, и у вас вряд ли получиться забыть о существовании этих новых достижений. Это может разочаровать тех, кто, как и я, любят все доводить до конца. Но есть простое решение: я запускаю игру и иду получать эти новые достижения. Это тяжелая работа, но кто-то же должен ее делать.
Будущее
Достижения являются весьма популярной частью игрового процесса Xbox 360. Настолько популярной, что мы расширили их область деятельности на ПК игры с помощью Games for Windows Live, и скоро они придут и в мобильные игры для грядущей Windows Phone 7.
Было весело создавать систему достижений, и я мне до сих пор нравится смотреть на эти всплывающие уведомления и слышать это счастливый звук. И так как вы смогли прочитать эту статью целиком, у вас тоже есть право услышать его:
Источник:
Перевод: Dazila
Комментарии
по-моему самым популярным достижением до недавних пор являлось:
По теме
- Как человек стал контроллером (ч.2)
- Как человек стал контроллером (ч.1)
- NAT и Xbox Live
- Новые элементы для главного меню Xbox 360
- Оставаться защищенным в Xbox Live
- Улучшение безопасности консоли
- Avatar Marketplace: открыт в режиме 24/7
- Как разработчики игр могут настраивать Xbox Live
- Технология аватаров Xbox LIVE
- Беспроводные возможности Xbox 360