Дисклеймер: азартные игры опасны для вашего кошелька и психического здоровья.
В предыдущей статье мы посмотрели на внутренности однорукого бандита «Мадока Магика А». Сегодня же давайте посмотрим, что внутри у его предшественника из 2013 года, а также разберёмся, как работают на нём сохранения в игре.
Этот автомат мне понравился по дизайну гораздо больше, сугубо за счёт того, что в него завезли побольше фокусов, в основном оптических.
Например, кнопка ставки меняет надпись в зависимости от контекста в игре:
Или же хромированный щит слева от экрана, у которого внезапно исчезает фрагмент, а внутри начинают вращаться шестерёнки:
Геймплей здесь практически не отличается — смотрим на экран, ловим намёки, крутим рулетку и надеемся на лучшее. Поэтому сразу залезем в техническую сторону вопроса.
Прежде всего в глаза бросается дисплей — да, в игровых автоматах делали экраны с вырезами ещё до того, как это стало мейнстримом!
На передней двери компоновка примерно такая же, как и в прошлый раз — динамики, кнопки, приёмник жетонов, а также вторичный компьютер, отрисовывающий графику на экране.
Внутри него — внезапный PowerPC e800:
В паре с чем-то неопознанным, опять же, от Nvidia:
ПЗУ тоже не запаяно, а находится на картридже неизвестного форм-фактора и интерфейса:
В остальном, внутрянка практически вся такая же, разве что скомпонована иначе. Тот же защищённый микроконтроллер в отдельном блоке управления барабанами:
Отдельные приветы тем, кто отвечает за названия игр — эта версия для игрока называется просто «Мадока Магика», а по внутренней номенклатуре «Мадока Магика А». Та версия, которая была в прошлом обзоре, для игрока называлась «Мадока Магика А», а по номенклатуре — «Мадока Магика АМА». Искать документацию при таком шикарном подходе — особый вид развлечения.
Кстати говоря про документацию — с этим автоматом мне сильно повезло, ведь к нему прилагалась и инструкция по эксплуатации, которые встречаются чуть ли не реже, чем сами автоматы!
Внутри — максимально подробные чертежи с указанием размеров, разводка кабелей между модулями, а также описание самой игры, написанное лютейшим японским канцеляритом.
При разборке я заметил, что к матрице идёт обыкновенный LVDS-шлейф, и мне подумалось — а нельзя ли в него врезаться и перехватить видеосигнал, чтобы выводить на стримах видео прямо с автомата?
И как известно, любая бешеная электронная идея уже давно реализована кем-нибудь на алиэкспрессе — там нашлась вот такая плата конвертации LVDS в HDMI.
В автомат встала как родная, пришлось лишь обтесать коннектор HDMI на кабеле, чтобы его протиснуть в раму, а затем закрепить всё двусторонним скотчем:
Звук, правда, вывести не удалось — линейного уровня сигнала внутри автомата нет, а динамики подключены к каким-то интересным чипам, сочетающим I2S-ЦАП и усилитель в одном корпусе. Но вот картинка с матрицы вполне себе выводится!
У этого автомата тоже есть интерактивная функция — через приложение можно выбирать персонажа, сопровождающего во время игры, а также фон за ним, голос системных объявлений, и прочее:
После выставления настроек, программа выдаёт пароль, который нужно ввести на автомате для загрузки игры:
Эта версия мне не понравилась тем, что на самом автомате менять настройки и персонажа нельзя — то есть, если когда-то официальный сервер игры уйдёт в офлайн, то доступны будут лишь стандартные настройки.
После нескольких игр, я понял, что эти пароли мне что-то напоминают… Например, если посмотреть на некоторые, выложенные кем-то по доброте душевной на Yahoo Answers:
Да это же просто шестнадцатеричное число! Поэтому берём эксельку и, как в старые добрые времена с Cheat Engine и иже с ними, начинаем записывать, когда что меняется:
Но увы, порой из-за смены одного параметра меняются несколько букв, а иногда наоборот — одна и та же буква меняется при изменении совершенно не связанных параметров.
Это означает, что значения упакованы с плотностью до бита, и нам нужно смотреть уже на уровне битов, а не шестнадцатеричных букв. В какой-то момент я пришёл к тому, что формат кода следующий:
Разумеется, всё это использует нестандартную нумерацию, чтобы избежать слишком очевидных паттернов. Больше всего пришлось поломать голову над уровнями, т.к. преобразование было ни разу не очевидным. Если подразумевать, что первый уровень на самом деле кодируется как 0:
Со временем, при помощи друзей я таки нашёл формулу, по которой происходит преобразование, но по очевидным причинам в рамках данной статьи оставим это как домашнее упражнение для читателя. :-)
Последним фактором осталась контрольная сумма. Над ней тоже пришлось колдовать долго, но в итоге я наткнулся на такой полезный инструмент, как CRC RevEng. Засовываем в него все имеющиеся образцы кодов, указываем ширину контрольной суммы в 8 бит, и вуаля — действительно, это кастомная реализация CRC8, и теперь мы знаем все её детали, а значит, можем попробовать написать кейген в том же экселе:
Контрольная сумма сходится! Раскидываем на HTML1.0:
И вуаля! Теперь, даже если сервера оригинальной игры уйдут в офлайн, нам это не страшно — с кейгеном весь контент по-прежнему доступен для игрока. А меня после этой публикации, скорее всего, в игорные заведения больше пускать не будут. :-)
Узнать об этом, конечно же, вы сможете в моём дневнике инженерных (и не очень) похождений лунного скитальца в Телеграме. :-)
Возможно, захочется почитать и это:
В предыдущей статье мы посмотрели на внутренности однорукого бандита «Мадока Магика А». Сегодня же давайте посмотрим, что внутри у его предшественника из 2013 года, а также разберёмся, как работают на нём сохранения в игре.
❯ Внешние отличия
Этот автомат мне понравился по дизайну гораздо больше, сугубо за счёт того, что в него завезли побольше фокусов, в основном оптических.
Например, кнопка ставки меняет надпись в зависимости от контекста в игре:
Или же хромированный щит слева от экрана, у которого внезапно исчезает фрагмент, а внутри начинают вращаться шестерёнки:
❯ Заглянем внутрь
Геймплей здесь практически не отличается — смотрим на экран, ловим намёки, крутим рулетку и надеемся на лучшее. Поэтому сразу залезем в техническую сторону вопроса.
Прежде всего в глаза бросается дисплей — да, в игровых автоматах делали экраны с вырезами ещё до того, как это стало мейнстримом!
На передней двери компоновка примерно такая же, как и в прошлый раз — динамики, кнопки, приёмник жетонов, а также вторичный компьютер, отрисовывающий графику на экране.
Внутри него — внезапный PowerPC e800:
В паре с чем-то неопознанным, опять же, от Nvidia:
ПЗУ тоже не запаяно, а находится на картридже неизвестного форм-фактора и интерфейса:
В остальном, внутрянка практически вся такая же, разве что скомпонована иначе. Тот же защищённый микроконтроллер в отдельном блоке управления барабанами:
Отдельные приветы тем, кто отвечает за названия игр — эта версия для игрока называется просто «Мадока Магика», а по внутренней номенклатуре «Мадока Магика А». Та версия, которая была в прошлом обзоре, для игрока называлась «Мадока Магика А», а по номенклатуре — «Мадока Магика АМА». Искать документацию при таком шикарном подходе — особый вид развлечения.
Кстати говоря про документацию — с этим автоматом мне сильно повезло, ведь к нему прилагалась и инструкция по эксплуатации, которые встречаются чуть ли не реже, чем сами автоматы!
Внутри — максимально подробные чертежи с указанием размеров, разводка кабелей между модулями, а также описание самой игры, написанное лютейшим японским канцеляритом.
❯ Моддинг — добавляем HDMI
При разборке я заметил, что к матрице идёт обыкновенный LVDS-шлейф, и мне подумалось — а нельзя ли в него врезаться и перехватить видеосигнал, чтобы выводить на стримах видео прямо с автомата?
И как известно, любая бешеная электронная идея уже давно реализована кем-нибудь на алиэкспрессе — там нашлась вот такая плата конвертации LVDS в HDMI.
В автомат встала как родная, пришлось лишь обтесать коннектор HDMI на кабеле, чтобы его протиснуть в раму, а затем закрепить всё двусторонним скотчем:
Звук, правда, вывести не удалось — линейного уровня сигнала внутри автомата нет, а динамики подключены к каким-то интересным чипам, сочетающим I2S-ЦАП и усилитель в одном корпусе. Но вот картинка с матрицы вполне себе выводится!
❯ Пишем кейген
У этого автомата тоже есть интерактивная функция — через приложение можно выбирать персонажа, сопровождающего во время игры, а также фон за ним, голос системных объявлений, и прочее:
После выставления настроек, программа выдаёт пароль, который нужно ввести на автомате для загрузки игры:
Эта версия мне не понравилась тем, что на самом автомате менять настройки и персонажа нельзя — то есть, если когда-то официальный сервер игры уйдёт в офлайн, то доступны будут лишь стандартные настройки.
После нескольких игр, я понял, что эти пароли мне что-то напоминают… Например, если посмотреть на некоторые, выложенные кем-то по доброте душевной на Yahoo Answers:
4358EE87A875
435A9687286D
435BCA87C8CD
Да это же просто шестнадцатеричное число! Поэтому берём эксельку и, как в старые добрые времена с Cheat Engine и иже с ними, начинаем записывать, когда что меняется:
Но увы, порой из-за смены одного параметра меняются несколько букв, а иногда наоборот — одна и та же буква меняется при изменении совершенно не связанных параметров.
Это означает, что значения упакованы с плотностью до бита, и нам нужно смотреть уже на уровне битов, а не шестнадцатеричных букв. В какой-то момент я пришёл к тому, что формат кода следующий:
- 3 бита — выбранный персонаж
- 7 битов — текущий уровень персонажа
- 4 бита — уровень реинкарнации персонажа (влияет на цвет рамки вокруг экрана)
- 2 бита — костюм персонажа
- 4 бита — аксессуар персонажа
- 2 бита — питомец персонажа
- 11 бит — неизвестное значение. Возможно, это идентификатор игрока, чтобы нельзя было сохраняться не своим паролем. Для безопасности я содрал эти биты у ответившего на Yahoo по ссылке выше :-)
- 4 бита — изображение на фоне экрана
- 3 бита — голос озвучки событий в игре
- 8 бит — некая контрольная сумма, т.к. они меняются при изменении любого параметра
Разумеется, всё это использует нестандартную нумерацию, чтобы избежать слишком очевидных паттернов. Больше всего пришлось поломать голову над уровнями, т.к. преобразование было ни разу не очевидным. Если подразумевать, что первый уровень на самом деле кодируется как 0:
Со временем, при помощи друзей я таки нашёл формулу, по которой происходит преобразование, но по очевидным причинам в рамках данной статьи оставим это как домашнее упражнение для читателя. :-)
Последним фактором осталась контрольная сумма. Над ней тоже пришлось колдовать долго, но в итоге я наткнулся на такой полезный инструмент, как CRC RevEng. Засовываем в него все имеющиеся образцы кодов, указываем ширину контрольной суммы в 8 бит, и вуаля — действительно, это кастомная реализация CRC8, и теперь мы знаем все её детали, а значит, можем попробовать написать кейген в том же экселе:
Контрольная сумма сходится! Раскидываем на HTML1.0:
И вуаля! Теперь, даже если сервера оригинальной игры уйдут в офлайн, нам это не страшно — с кейгеном весь контент по-прежнему доступен для игрока. А меня после этой публикации, скорее всего, в игорные заведения больше пускать не будут. :-)
Узнать об этом, конечно же, вы сможете в моём дневнике инженерных (и не очень) похождений лунного скитальца в Телеграме. :-)
Возможно, захочется почитать и это:
- ➤ Коробочка, которая поёт
- ➤ Самый суровый магнитный ключ
- ➤ Сам написал, сам поиграл: как я написал 2D-игру для Android полностью с нуля, весом менее 1мб?
- ➤ Немного о производстве пива
- ➤ Как создавали Sid Meier's Civilization
Комментарии (9)
drdead
15.09.2023 10:22Прекрасно, а то первая часть на таком клиффхэнгере закончилась
А будет ли cabinet с 電車でGO! с кастомными треками когда-нибудь? :)
Dimsml
15.09.2023 10:22+1В паре с чем-то неопознанным, опять же, от Nvidia:
Нашёл в кеше поисковика страницу с маркетплейса с названием: "Nvidia GF-EMP8-A2 Видеочип для ноутбука, Reball. Это аналог чипа G86-731-A2". Если поискать по второму номеру, то похоже что это Nvidia Geforce 8400M GS.
MaFrance351
Очень классно! Люблю подобные железки.
Вообще, слышал немало историй про защиту в этих японских автоматах. Мол, даже были экземпляры, где надо покупать число попыток, и если сервера накроются, то девайс станет куском металлолома. Или вроде даже было ограничение попыток для одного автомата.
Кстати, система с паролями в своё время в играх использовалась очень широко. Но там это было для сохранения, чтобы сразу перейти на нужный уровень.
И да, спасибо за ссылку на софт для реверса контрольной суммы. Для реверса всяких протоколов штука очень прикольная.
vladkorotnev Автор
С азартными автоматами такого как правило нет.
В современных аркадах да, весь биллинг онлайн, и зачастую надо отдавать издателю процент с выручки автомата, а если автомат долго висит без сети и эту информацию в бухгалтерию не передаёт — пережигаются фьюзы в контроллере ключа и он блокируется. Новый получить только по цене новой лицензии и с объяснительной, почему так получилось. Правда, чаще всего сама игра без доступа к своим серверам тоже не работает, т.к. надо мониторить наличие лицензий на музыку и прочие ассеты, поэтому до стадии биллинга оно даже не загрузится.
Но про это я, думаю, ещё долго писать не буду — всё-таки вещь пока ещё актуальная и в продакшне применяющаяся.
MaFrance351
А, тогда понятно. Кстати, аркадный тоже было бы интересно поковырять. Когда-то была возможность заиметь платы от старых каких-то, но что-то так и не заполучил. А вот с игровыми много ковырялся.
Но почему же? Дорого достать аппарат на опыты? Или за вами выедут?
vladkorotnev Автор
Аппаратов у меня дома аж два стоит, с полным обвесом для своих игр :-)
Но пока лучше не рисковать, да.
Про одну уже старую и почти помершую платформу, с которой приходилось повозиться, статья есть на гитхабе, что-то новее пока не стоит трогать.
MaFrance351
И оба аппарата дохлые, да?
Вообще, печально это всё. Вот так всякие игры и уходят в историю просто из-за невозможности запустить их...
vladkorotnev Автор
Отнюдь, полностью рабочие! Просто почему и каким образом они рабочие — время писать ещё не пришло :-)
MaFrance351
Просто изначально они были дохлые, но после некоторых операций стали рабочими?