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

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:

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

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



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



Комментарии (9)


  1. MaFrance351
    15.09.2023 10:22
    +2

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


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


    1. vladkorotnev Автор
      15.09.2023 10:22
      +1

      С азартными автоматами такого как правило нет.

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

      Но про это я, думаю, ещё долго писать не буду — всё-таки вещь пока ещё актуальная и в продакшне применяющаяся.


      1. MaFrance351
        15.09.2023 10:22
        +2

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


        Но про это я, думаю, ещё долго писать не буду — всё-таки вещь пока ещё актуальная и в продакшне применяющаяся.

        Но почему же? Дорого достать аппарат на опыты? Или за вами выедут?


        1. vladkorotnev Автор
          15.09.2023 10:22
          +1

          Аппаратов у меня дома аж два стоит, с полным обвесом для своих игр :-)


          Но пока лучше не рисковать, да.


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


          1. MaFrance351
            15.09.2023 10:22
            +3

            И оба аппарата дохлые, да?


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


            1. vladkorotnev Автор
              15.09.2023 10:22

              Отнюдь, полностью рабочие! Просто почему и каким образом они рабочие — время писать ещё не пришло :-)


              1. MaFrance351
                15.09.2023 10:22

                Просто изначально они были дохлые, но после некоторых операций стали рабочими?


  1. drdead
    15.09.2023 10:22

    Прекрасно, а то первая часть на таком клиффхэнгере закончилась

    А будет ли cabinet с 電車でGO! с кастомными треками когда-нибудь? :)


  1. Dimsml
    15.09.2023 10:22
    +1

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

    Нашёл в кеше поисковика страницу с маркетплейса с названием: "Nvidia GF-EMP8-A2 Видеочип для ноутбука, Reball. Это аналог чипа G86-731-A2". Если поискать по второму номеру, то похоже что это Nvidia Geforce 8400M GS.