Часть первая. Разработка аркадного автомата на базе MAME с обёрткой HyperSpin

Друзья, всех категорически приветствую. Я хочу поговорить с вами о том, как докатился до такой жизни, что решился собрать свою первую аркадную машину. Как мне кажется, многим людям, увлекающимися электронными ретро-играми, порой хочется перейти от домашних платформ к тем гробам, что стоят в залах автоматов. Причины могут быть разные: развитие игрового кругозора; воспоминания о турнире, проводившемся на советском игровом аппарате с незатейливым названием «БАСКЕТБОЛ»; или, возможно, вы были в развлекательном клубе Star Galaxy, находящемся недалеко от этого вашего VEGAS’а, и там познакомились с The House of the Dead 2, использующим световые пистолеты. А может, как у меня, были все причины сразу. Так или иначе, но вы пришли к аркаде.

Одним из первых вопросов, скорее всего, будет вот этот: «Как запустить аркадные игры? Неужели нужно где-то доставать настоящие аркадные автоматы?». Ответ достаточно прост: «Для многих аркадных систем, под которые разрабатывались игры, подойдёт эмулятор MAME». Так что тут всё по классике, особенно для тех, кто топит за эмуляцию. Скачиваем ром, скачиваем эмуль, конфигурируем управление под необходимое устройство ввода, возимся с настройками, запускаем ром, играем. Ничего нового. Но что мы знаем об эмуляторе MAME, помимо того, что он позволяет запускать аркады? А то, что точность эмуляции ПО на нём достаточно высокая. Значит, с определёнными оговорками мы запускаем игры в условиях, приближенных к боевым. Следовательно, эмулятор годится в качестве основы для аркадного автомата, под капотом которого в реальности прячется бытовой ПК.

Правда, мало взять один эмулятор, ибо UI большинства из них, а уж у MAME подавно, не тянет для того, чтобы показывать обложку игры, позволять конечному пользователю выбирать необходимую игровую систему и проматывать список игр. Но не стоит отчаиваться, ведь для всех этих нужд придумана оболочка HyperSpin.

Интересно? Тогда давайте разбираться более детально.

 

Скачивание и обработка информации по ромам

Скачать ромы я решил с сайта emu-land.net. Первая же засада, с которой столкнулся, это реклама. Логика работает таким образом: при многократном использовании ссылок, внутри сайта срабатывает защита, предполагающая, что я не человек, а робот, поэтому выводит окно с соответствующим подтверждением. С учётом количества ромов, коих было в 2019 году более пяти тысяч, такое занятие отняло бы у меня неприлично много времени. Чтобы упростить процесс, я написал парочку скриптов, которые обобщённо назвал «0. Скачивание с Emu-Land паков файлов». Суть в следующем: сначала мы получаем список всех индексов:

link = «https://www.emu-land.net/arcade/mame/roms?act=getfile&id=»ids = (1..10_000).map(&:to_i)ids.each do |id|               puts link + id.to_send

Затем, используя полученные индексы, запускаем процесс скачивания ромов через командную строку:

wget -w 6 -P C:\downloads -i C:\downloads\links.txt —no-check-certificate

Графически процесс скачивания файлов выглядит следующим образом:

Далее требовалось привести всю эту кипу ромов в нечто приличное, а точнее, чтобы непонятные названия файлов превратились с помощью техномагии в читабельные названия игр. В идеале с кратким описанием, датой выхода, жанром, никому ненужным рейтингом и тому подобное. Оговорюсь: для удобства чтения скрипты представлены в виде ссылок на Яндекс.Диск. Ну а теперь приступаем к индусскому программированию!

Сначала шли эксперименты по взаимодействию с .xml-файлами.

«1. Подбор нужных данных в одном файле и запись их в другой».

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

«2. Создание .xml-файла, где у игр не определены данные».

Получив необходимую «рыбу», занялся насыщением данных всех игровых проектов. В этом мне помогли emu-land.net и WoWroMs.

«3. Парсинг названий файлов игр с Emu-Land».

«4. Парсинг жанров игр с WoWroMs».

«5. Парсинг жанров игр с WoWroMs (чтение данных со страниц игр)».

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

«6. Печать названий игр».

«7. Печать жанров».

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

«8. Удаление из MAME.xml игр с определённым жанром».

Эврика. Поздравляю! После наших трудов мы получили необходимое содержимое в файле «MAME.xml», который вскоре пригодится нам в работе с HyperSpin.

 

Её величество – обёртка HyperSpin

Что мне было известно о HyperSpin на момент начала работы с ней? Это оболочка, позволяющая выбрать игру для конкретного эмулятора. Для каждой страницы может быть своё индивидуальное оформление, выраженное в красиво отрегулированном фоне и мини-ролике, показывающем геймплей. В худшем случае, если дизайн отсутствует, будет отображаться название игры. Мне хотелось, используя готовые материалы других людей, получить приятные образцы страниц как можно большего числа игр, поэтому скачивал различные сборки HyperSpin, извлекая из них необходимый медиа-материал. В целом, ничего сложного. Главное только разобраться со структурой хранения информации. По итогу нашёл даже русифицированное меню, которое вы могли наблюдать на фотографиях выше.

Также есть возможность создавать список избранных игр, а фильтрация работает по жанрам, для чего в директории «HyperSpin»à«Databases»à[название эмулятора] создаётся список .xml-файлов, содержащих перечень наименований с необходимым жанром.

Но, конечно, без нюансов никуда. Настройка управления, сделанная для HyperSpin, будет работать только в самой оболочке! То есть для каждого эмулятора управление нужно настраивать отдельно. Среди прочих проблем, с которыми есть вероятность столкнуться – битности эмулятора и моей операционки отличались, поэтому экстренно пришлось откапывать другой. Этот инцидент вышел по причине того, что сборку HyperSpin тестировал на одном «железе», ибо мне было так удобнее, а вот итоговый результат запускал на ином. Будьте внимательны, не повторяйте моих ошибок. После того, как настроите HyperSpin по своему вкусу, вам останется лишь закинуть ярлык в автозапуск.

 

Сборка аркадного джойстика

Любой творческий процесс начинается с идеи. Затем идёт анализ идеи. Собирается информация о возможных вариантах реализации задуманного. Потом идут записи, чертежи, расчёты, бесконечные попытки и неудачи. Только после всего этого, возможно, выходит что-то путное. Моя идея (а точнее – желание) при разработке аркадного джойстика состояла в следующем: сделать пульт управления на двух игроков своими руками, закупив джойстики и кнопки различных размеров на «Алике». По итогу поисков необходимой начинки откопал следующий вариант: восемь кнопок диаметром 30 мм, две кнопки 25 мм, джойстик и плата. Умножаем набор на два. Получаем количество, необходимое для двух игроков. Расчёт следующий: первый комплект 30 мм будет отдан под различные действия в игре, две по 25 мм оставлены для монеток и клавиши Start, сам джойстик – для движения.

Корпус я сделал из столешницы компьютерного стола. Толстое прочное дерево. Различные схемы расположения кнопок на верхней панели смотрел в сети. Собрал гибрид из нескольких вариантов схем, постаравшись учесть следующий момент: длина пальцев у людей разная, соответственно лучше разместить кнопки полукругом, а не в линию.

После чертежей берём электрический лобзик. Настраиваем скорость лезвия. Вырезаем детали. Пером просверливаем круглые отверстия. В местах соединения вырезанных деталей сверлом, находящимся в руке, просверливаем небольшие углубления, дабы шапочки саморезов не выпирали. Соединяем. Шпаклёвкой стараемся сгладить неровности. Наждачкой, привязанной к плоскому куску дерева, убираем лишнюю шпаклёвку после того, как та застыла. Красим краской (с этим мне помогли мои аккуратные жена с дочкой). Вставляем кнопки в отверстия. Прикручиваем джойстик. Аккуратно прибиваем плату маленькими гвоздиками, чтобы ничего важного не треснуло. Соединяем провода. Итоговый результат:

 

Сборка аркадного корпуса

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

В процессе сборки корпус аркадного автомата выглядел так:

Итоговый вариант:

Как часто бывает, в процессе разработки изначальный вариант претерпевает изменения. Порой кардинальные. В нашем случае изменилось следующее: дверь доступа осталась только задняя; колонки размещать не стал, так как звук от ноутбука достаточно громкий, без помех; USB-разветвитель приобрёл, но поскольку аппарат рассчитан максимум на двоих игроков, забил с ним возиться; клавиатура и мышка находятся не в выдвижном ящике, а внутри аркадного джойстика; выделенная кнопка питания аркадного автомата осталась просто как декоративный элемент от первоначальной задумки. Можно ли было сделать лучше? Да, безусловно. Нужно ли мне это? Нет. Аппарат работает так, как мне хочется. При запуске компьютера сразу включается HyperSpin, «внутри» которого я выбираю необходимый эмулятор из одной позиции, а далее тыкаю в конкретный тайтл, который хочу запустить.

 

Финальные штрихи истории

Вроде бы всё хорошо. Игры собрали, эмулятор завернули в классную обёртку, списки по жанрам разбили. Аркадный джойстик и аркадную коробку смастерили своими руками. Но знаете, что? Мы не можем точно сказать, какие игры есть в нашем распоряжении. Поэтому берём список, который составили ранее, затем делаем здоровенную таблицу. На вход было 5819 наименований, каждое из которых обрабатывалось вручную. Пришлось разбираться, к какой серии относится каждый проект, с какими связан. Выяснилось, скажем, что под сенью The King of Fighters приютилась целая викторина с незамысловатым названием Quiz King of Fighters. На полную обработку массива данных ушло много сил. Выработал для себя чёткие правила: каждый день проходил минимум 33 записи; больше – пожалуйста, меньше нельзя. Единственное исключение сделал на майские праздники. Поскольку одна игра может относиться к нескольким вселенным, или один ром иногда является сборником игр, у меня получилось 6364 записи.

Что касается дат, то аркадный автомат собирал где-то с апреля 2019-го по июнь 2020-го; «перепись населения» производил с 01.01.2025 по 17.05.2025. Желаю всем заинтересовавшимся темой сил и терпения. В статье не передать всего, что творилось, пока проходил этот долгий путь. Но результат, поверьте на слово, стоит всех затрат, если вы упёртый ретро-фан. Главное – любить то, что вы делаете. Во второй части материала обязательно поговорим о сборке аркадной машины с аппаратным воспроизведением ПО. Добра, здоровья и мирного неба над головой!


Автор:

Дмитрий «Рексарыч» Пасько

Добавить комментарий

Ваш адрес email не будет опубликован.

  1. Macintosh:

    Крутой материал. Я пока далёк от этого, но мечтаю об аркадном автомате и обязательно с ЭЛТ-монитором.