Вчера Вчера 2 226

RetroAchievements — как выбить платину в игре 30-летней давности

+5

Недавно я купил себе Retroid Pocket 3 (как только изучу устройство со всех сторон, напишу статью и о нём). Сейчас я на этапе активного тестирования игр на этом девайсе, но чтобы дойти до этого момента, мне пришлось пройти тернистый путь настройки всего «железа». БИОСы, ROM’ы, конфиги и куча других непонятных слов…

Особых мук мне доставил RetroArch (как же я его ненавижу!) — это, условно говоря, «консольный комбайн», позволяющий запускать игры для любых ретро-систем. Но без гайдов тут не обойтись.

Однако сегодня речь не об этом (подробнее о RetroArch поговорим в статье про Retroid). В процессе настройки я заметил любопытное окно — «Настройки RetroAchievements». Покопавшись в интернете, решил поделиться с вами этой находкой.

Что такое RetroAchievements и с чем его едят?

RetroAchievements — это сервис, который добавляет достижения в ретро-игры. Теперь можно получать ачивки в играх, где изначально даже намёка на подобную механику не было. Например, за «50 собранных муравьёв» в Earthworm Jim или за прохождение Battletoads без единой смерти. Даже в игре про призрака Каспера на Game Boy есть ачивки (и это не шутка!).

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

Это достижение даже не для GBA, это обычный GameBoy
Это достижение даже не для GBA, это обычный GameBoy

Техническая часть

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

Имея небольшие познания в устройстве компьютеров, я полез в интернет и вот что выяснил.

Базовая логика взаимодействия пользователя и сервиса
Базовая логика взаимодействия пользователя и сервиса

1. Как игра понимает, что я «собрал 50 голубей»?

  • Чтение оперативной памяти (RAM)

Эмулятор с поддержкой RetroAchievements анализирует RAM игры — например, здоровье героя, количество очков или пройденные уровни.

Допустим, в Super Mario Bros. система отслеживает (пример вымышленный):

  • 0×0756 — текущий уровень,
  • 0×075A — количество монет.

Эти адреса и условия прописаны в файлах достижений на сервере RetroAchievements.

2. Я собрал 50 голубей. Что дальше?

  • Логика ачивок на сервере. Каждое достижение — это скрипт с условиями. Например:

«Если значение по адресу X = 5 (уровень пройден) и Y > 100 (монет собрано), выдать ачивку».

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

3. Где моё «Ура, вы собрали 50 голубей!»?

  • Обмен данными между клиентом и сервером.
    Вы входите в аккаунт через настройки эмулятора. Сервер проверяет условия и возвращает уведомление о разблокировке.

Безопасность

Такова базовая логика взаимодействия между сервисом, эмулятором и игроком.

Но меня волновал вопрос: «Неужели какой-то сервер знает, сколько гангстеров я убил в GTA: San Andreas для PS2?» Оказалось, что нет!

Вот как это работает на практике:

  1. При запуске игры эмулятор спрашивает сервер: — «Эй, пользователь запустил Persona 3 для PSP. Какие есть достижения?»
  2. Сервер отвечает: — «Вот список: например, за 100 персон — достижение „Повелитель персон“ (адрес счётчика: 0×00AB).
  3. Эмулятор локально проверяет RAM и только при выполнении условия отправляет серверу: — «Игрок получил достижение!»

Заключение

RetroAchievements — это отличное дополнение для погружения в ретро-игры:

  • Для ветеранов — повод перепройти любимые тайтлы с новым вызовом.
  • Для новичков (вроде меня) — мотивация изучить игру полностью.

P. S. Это моя первая статья, и я очень старался. Прошу не рассматривать её как техническую документацию — подробности есть на официальном сайте. Я же хотел объяснить сложные вещи простым языком.


Теги

Лучшие комментарии

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

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

Читай также