Как стать автором
Обновить
1619.98
Timeweb Cloud
То самое облако

Что внутри у однорукого бандита? Разборка, моддинг, и написание кейгена. [Part 2]

Время на прочтение4 мин
Количество просмотров5.6K
Дисклеймер: азартные игры опасны для вашего кошелька и психического здоровья.

image

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

Внешние отличия


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

Например, кнопка ставки меняет надпись в зависимости от контекста в игре:

image

image

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

Заглянем внутрь


Геймплей здесь практически не отличается — смотрим на экран, ловим намёки, крутим рулетку и надеемся на лучшее. Поэтому сразу залезем в техническую сторону вопроса.

image

Прежде всего в глаза бросается дисплей — да, в игровых автоматах делали экраны с вырезами ещё до того, как это стало мейнстримом!

image

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

Внутри него — внезапный PowerPC e800:

image

В паре с чем-то неопознанным, опять же, от Nvidia:

image

ПЗУ тоже не запаяно, а находится на картридже неизвестного форм-фактора и интерфейса:

image

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

image

Отдельные приветы тем, кто отвечает за названия игр — эта версия для игрока называется просто «Мадока Магика», а по внутренней номенклатуре «Мадока Магика А». Та версия, которая была в прошлом обзоре, для игрока называлась «Мадока Магика А», а по номенклатуре — «Мадока Магика АМА». Искать документацию при таком шикарном подходе — особый вид развлечения.

Кстати говоря про документацию — с этим автоматом мне сильно повезло, ведь к нему прилагалась и инструкция по эксплуатации, которые встречаются чуть ли не реже, чем сами автоматы!

image

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

image

Моддинг — добавляем HDMI


При разборке я заметил, что к матрице идёт обыкновенный LVDS-шлейф, и мне подумалось — а нельзя ли в него врезаться и перехватить видеосигнал, чтобы выводить на стримах видео прямо с автомата?

И как известно, любая бешеная электронная идея уже давно реализована кем-нибудь на алиэкспрессе — там нашлась вот такая плата конвертации LVDS в HDMI.

image

В автомат встала как родная, пришлось лишь обтесать коннектор HDMI на кабеле, чтобы его протиснуть в раму, а затем закрепить всё двусторонним скотчем:

image

Звук, правда, вывести не удалось — линейного уровня сигнала внутри автомата нет, а динамики подключены к каким-то интересным чипам, сочетающим I2S-ЦАП и усилитель в одном корпусе. Но вот картинка с матрицы вполне себе выводится!

Пишем кейген


У этого автомата тоже есть интерактивная функция — через приложение можно выбирать персонажа, сопровождающего во время игры, а также фон за ним, голос системных объявлений, и прочее:

image

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

image

Эта версия мне не понравилась тем, что на самом автомате менять настройки и персонажа нельзя — то есть, если когда-то официальный сервер игры уйдёт в офлайн, то доступны будут лишь стандартные настройки.

После нескольких игр, я понял, что эти пароли мне что-то напоминают… Например, если посмотреть на некоторые, выложенные кем-то по доброте душевной на Yahoo Answers:

4358EE87A875

435A9687286D

435BCA87C8CD

Да это же просто шестнадцатеричное число! Поэтому берём эксельку и, как в старые добрые времена с Cheat Engine и иже с ними, начинаем записывать, когда что меняется:

image


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

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

image

  • 3 бита — выбранный персонаж
  • 7 битов — текущий уровень персонажа
  • 4 бита — уровень реинкарнации персонажа (влияет на цвет рамки вокруг экрана)
  • 2 бита — костюм персонажа
  • 4 бита — аксессуар персонажа
  • 2 бита — питомец персонажа
  • 11 бит — неизвестное значение. Возможно, это идентификатор игрока, чтобы нельзя было сохраняться не своим паролем. Для безопасности я содрал эти биты у ответившего на Yahoo по ссылке выше :-)
  • 4 бита — изображение на фоне экрана
  • 3 бита — голос озвучки событий в игре
  • 8 бит — некая контрольная сумма, т.к. они меняются при изменении любого параметра

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

image

Со временем, при помощи друзей я таки нашёл формулу, по которой происходит преобразование, но по очевидным причинам в рамках данной статьи оставим это как домашнее упражнение для читателя. :-)

Последним фактором осталась контрольная сумма. Над ней тоже пришлось колдовать долго, но в итоге я наткнулся на такой полезный инструмент, как CRC RevEng. Засовываем в него все имеющиеся образцы кодов, указываем ширину контрольной суммы в 8 бит, и вуаля — действительно, это кастомная реализация CRC8, и теперь мы знаем все её детали, а значит, можем попробовать написать кейген в том же экселе:

image

Контрольная сумма сходится! Раскидываем на HTML1.0:

И вуаля! Теперь, даже если сервера оригинальной игры уйдут в офлайн, нам это не страшно — с кейгеном весь контент по-прежнему доступен для игрока. А меня после этой публикации, скорее всего, в игорные заведения больше пускать не будут. :-)

Узнать об этом, конечно же, вы сможете в моём дневнике инженерных (и не очень) похождений лунного скитальца в Телеграме. :-)



Возможно, захочется почитать и это:



Теги:
Хабы:
Всего голосов 35: ↑35 и ↓0+35
Комментарии9

Публикации

Информация

Сайт
timeweb.cloud
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия
Представитель
Timeweb Cloud