April 20

RetroArch: установка и настройка на ПК

Моя инсталляция RetroArch, которой уже исполнилось немало годков, в какой-то момент решила заглючить. Контроллеры перестали подключаться, выводились странные сообщения. Вылечилось это только полным удалением всех конфигов, но я подумал - раз все равно надо все настраивать, почему бы не поставить его с нуля и описать весь процесс? Итак, приступим. Это не всеобъемлющая инструкция, а скорее мастер-класс по установке и настройке, как это делаю я.

Установка

У RetroArch есть масса самых разных версий под разные платформы. Все они перечислены на сайте продукта. Поскольку я сторонник портативной установки, то и скачаю именно эту версию. ОС у меня Windows 10.

Платформ много, на скриншот все не влезают.

После распаковки Retroarch можно запустить. Он откроется в окне. Язык программы будет таким же, какой выбран в нашей ОС.

Первый пункт получился простым и коротким. Дальше интереснее.

Первые настройки

Сразу же поправлю некоторые параметры. Прежде всего, да простят меня читатели, включу английский интерфейс. Очень много материалов по Retroarch англоязычные, и вспоминать, как это переведено, очень не хочется. Да и вам будет лучше сразу привыкнуть к терминологии. Идем в Настройки -> Пользователь -> Язык и выбираем там English.

Затем пробегусь по основным настройкам. Они будут изменяться для конкретных ядер и игр, но определенные значения я хочу иметь по умолчанию. Прежде всего, зайду в Settings -> Video:

  • В подменю Output включу видеодрайвер Vulkan. Это очень полезно для шейдеров.
  • В подменю Scaling включу Integer Scale. Aspect Ratio оставлю в режиме Core Provided. То есть, игра будет растягиваться кратно, это дает более четкое изображение. А соотношение сторон по умолчанию будет таким, какое сообщит ядро.
  • В подменю Synchronization включу Sync to Exact Content Framerate (G-Sync, Freesync), благо, монитор позволяет.
  • В меню Fullscreen Mode включу Start in Fullscreen Mode.

RetroArch отлично управляется с контроллера, но хоткей для его закрытия по умолчанию не установлен. Иду в меню Input -> Hotkeys и выбираю для Quit (Controller Combo) сочетание L3+R1. Будьте готовы настраивать оверрайды для тех игр, в которых выбранное вами сочетание кнопок для чего-то используется! Заодно для включения меню выберу в Menu Toggle (Controller Combo) комбинацию L3+R3. По умолчанию оно должно вызываться по нажатию на кнопку Guide, но у меня это работает через раз вне зависимости от контроллера.

Меню Latency отвечает за управление инпут-лагом. Здесь я включу Run-Ahead to Reduce Latency. Мне удобнее выключать его в тех ядрах, где эта функция не нужна или плохо работает. Появившиеся параметры оставлю по умолчанию.

В меню Saving включу Increment Save State Index Automatically. В этом случае каждое новое сохранение не будет затирать предыдущее. Чтобы сейвы не плодились, ограничу их максимальное количество до 10 настройкой Maximum Auto-Increment Save States to Keep. Включу также Auto Save State и Auto Load State, чтобы сейвстейт автоматически сохранялся при выходе и загружался при открытии игры.

В меню Configuration отключу Save Configuration on Quit. Я часто экспериментирую с настройками и создаю различные оверрайды, поэтому мне удобнее сохранять конфиг исключительно вручную.

В меню Achievements я включу одноименную настройку и пропишу свои Username и Password от сайта Retroachievements. Не то чтобы я такой маньяк ретроачивок, но с ними как-то интереснее.

Теперь можно пойти в Main Menu -> Configuration File и сохранить настройки командой Save Current Configuration.

Обновление и выбор ядер

В состав Retroarch входит большое количество данных, которые обновляются независимо: шейдеры, конфиги контроллеров, сведения о ядрах... Версия из скачанной поставки, скорее всего, уже устарела. Идем в Main Menu -> Online Updater и жмем на все команды, начинающиеся с Update:

Все это рекомендуется периодически обновлять

Наша следующая остановка - Core Downloader в том же меню. Здесь мы выбираем, какие ядра хотим скачать. Если вы не знаете, какие ядра использовать для той или иной системы, советую обращаться к Emulation Wiki.

При нажатии Select вы увидите короткое описание ядра. Лучше опираться на вики.

При нажатии на кнопку Start появится меню с расширенной информацией о ядре, включая то, какие системные файлы (например, BIOS консоли) ей требуются, присутствуют они или нет. Из этого же меню можно создать бэкап текущей версии ядра или заблокировать его от обновлений. Не стоит недооценивать эту функцию! С тестированием в Retroarch традиционно плохо, и ядра могут ВНЕЗАПНО сломаться.

Если в системе есть хоть одно ядро, становится доступна команда Update Installed Cores, обновляющая все незаблокированные установленные ядра.

Я быстро накидал список всех своих любимых ядер: Mesen, SameBoy, Gambatte, mGBA, bsnes... Но дальше необходимо добыть откуда-то большую порцию вспомогательных файлов.

Системные файлы

Системные файлы необходимы для корректной работы ядер. Это дампы BIOS платформ, драйверы периферии, части коммерческих версий игр... Легально вы можете их использовать только если сами их сдампили с собственного устройства или вытащили из своей копии игры. Фактически - сами все понимаете. Можно, конечно, собирать их поштучно, но смысла в этом я не вижу. В сети предоставлены различные архивы биосов. В прошлый раз я использовал архив с Emulation Wiki. но сейчас для разнообразия возьмем архив от Chadmaster с archive.org. Он разбит по платформам и ядрам и содержит не только биосы. Например, для ядер Doom или Quake выложены все необходимые файлы из коммерческих версий игр. Чтобы не скачивать все архивы поштучно, я воспользуюсь JDownloader2. Он умеет парсить страницу на предмет ссылок для закачки, а также поддерживает многопоточное скачивание. Это значительно ускоряет работу с archive.org.

При добавлении ссылки очень важно снять галку "Автоизвлечение", иначе все архивы будут по умолчанию распаковываться после скачивания. Если вы забыли это сделать, можно впоследствии для добавленных ссылок отключить его из контекстного меню.

И это еще не все архивы

Из списка я удалю ссылки на файлы всех Doom, Quake, Wolfenstein 3d и Lara Croft. Остальное весит не так много, даже если оно мне и не нужно. Скачанные архивы можно распаковать в подпапку Ретроарча System. Одноименные файлы можно смело заменять - это следствие того, что среди архивов есть версии для разных ядер. Единственный конфликт, с которым вы столкнетесь, связан с тем, что разные ядра SNES требуют разный формат образов для Super Game Boy. higan ожидает увидеть папки c именами SGB1.sfc и SGB2.sfc, а bsnes - файлы с такими же названиями. Тут уж вам решать, какое ядро вы планируете использовать. Лично я использую bsnes.

Шейдеры

Шейдеры - исполняемые на GPU программы обработки изображения. Они позволяют, например, имитировать эффект ЭЛТ-телевизора или старого ЖК-экранчика. Движок шейдеров - одна из самых сильных сторон Retroarch. Поддерживаются шейдеры на трех языках: CG, GLSL и Slang. Самый современный - последний. Своих шейдеров в Ретроарче вагон и маленькая тележка. Однако, есть ряд сторонних проектов, которые я использую с разной степенью регулярности. В основном это пресеты, использующие какие-то базовые шейдеры RetroArch. Авторы, как правило, публикуют свои работы на форуме Retroarch. Не то чтобы это всё было нужно в настройке, но раз начал коллекционировать шейдеры, то иди в своём увлечении до конца.

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

Все пути к файлам пресетов буду указывать относительно папки \shaders.

sonkun

Начнем установку с чего-нибудь попроще: New sonkun crt guest advanced presets. Это различные CRT-пресеты, построенные поверх, пожалуй, самого мощного CRT-шейдера - Guest Advanced. Качаем архив по ссылке из темы, распаковываем папку sonkun в \shaders_slang. Однако, далеко не факт, что пресеты у вас заведутся. Дело в том, что sonkun строит свои пресеты на самой последней версии шейдера Guest Advanced, а версия в репозитории Ретроарча обновляется нерегулярно. Последнюю версию придется скачивать из соответствующей темы на форуме. Архив необходимо распаковать с заменой файлов в \shaders_slang\crt.

Cyberlab Death to Pixels

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

  • CyberLab Custom Blargg NTSC Video Filter Presets - переработка NTSC-фильтров Blargg. Фильтры исполняются на CPU, и по своим возможностям они намного беднее шейдеров, однако, свое применение также находят. Архив с ними надо распаковать в папку Retroarch так, чтобы файлы *.filt оказались в \filters\video. Эти фильтры потребуются для корректной работы следующего пака.
  • CyberLab Mega Bezel Death To Pixels Shader Preset Pack - основной пакет пресетов для шейдера Mega Bezel, входящего в поставку RetroArch. Это невероятно мощный шейдер, позволяющий выполнять огромное количество операций с картинкой. Чтобы избежать конфликтов имен и облегчить перекрестные ссылки в пресетах, а также избежать затирания при обновлении поставляемых шейдеров, авторы договорились, что все пресеты будут размещать в подпапке \Mega_Bezel_Packs. Обратите внимание, именно так, не в \shaders_slang! Помимо вышупомянутых фильтров, проверьте, что у вас последняя версия шейдера Mega Bezel. Она лежит в \shaders_slang\bezel\Mega_Bezel, версию можно посмотреть в файле README.md. Если она не последняя, скачайте последнюю, удалите всю подпапку Mega_Bezel и распакуйте ее из архива. Удалять - важно, чтобы не остались файлы от старых версий шейдера.
  • CyberLab CRT-Royale Death To Pixels Shader Preset Pack и - для тех, кто не любит Mega Bezel, набор пресетов для шейдера CRT-Royale. Папки shaders и filters из архива при распаковке должны совпасть с соответствующими папками RetroArch. Автор зачем-то продублировал в поставке фильтры из первого подпункта - заменяйте смело.
  • CyberLab Megatron NX Death To Pixels 4K HDR Shader Preset Pack и CyberLab Megatron Death To Pixels 4K HDR Shader Preset Pack построены на шейдере Guest Advanced. Они предназначены для мониторов или телевизоров с поддержкой HDR-изображения. Пресеты следует распаковать в папку Shaders.

Duimon - HSM Mega Bezel Graphics and Presets

Набор пресетов для шейдера Mega Bezel от американского дизайнера под ником Duimon. Весит невероятно много, поскольку содержит рамки в очень высоком разрешении. Это мои любимые шейдеры для портативных консолей. Все ссылки, как обычно, в соответствующей теме на форуме. Распаковывать пресеты надо в \Mega_Bezel_Packs.

  • Duimon-Mega-Bezel - основной пак.
  • Duimon-Vintage-TV - шейдеры, имитирующие старые ЭЛТ-телевизоры. На мониторе смотрится так себе, но если их вывести на большой телевизор - будет стильно.
Пресет из набора Vintage-TV

Для корректной работы пресетов от Duimon потребуется отключить Integer Scaling, а Aspect Ratio перевести в Full - шейдер сам берет на себя масштабирование картинки и управление пропорциями.

У шейдера Mega Bezel есть крайне раздражающая особенность - по умолчанию при запуске всегда отображается интро-анимация. Это особенно бесит, когда игра автоматически загрузила последний сейв. Есть несколько способов ее отключить. Можно использовать меню самого RetroArch, но тогда придется сохранять пресеты. Можно откорректировать базовые конфиги самого шейдера: в файле \shaders_slang\bezel\Mega_Bezel\shaders\HyperspaceMadness\hsm\hsm-params-5-intro.inc найти строку "When to Show Intro - OFF|Game Load|Shader Load|Repeat" 1 0 3 1" и в ней заменить последние 4 цифры на 0. Минус такого подхода - файл будет затираться при каждом обновлении шейдеров.

Пресеты от Duimon имеют собственную настройку. Находим файл \Mega_Bezel_Packs\Duimon-Mega-Bezel\zzz_global_params\Intro\on.params, и в нем раскомментируем 13 строку //HSM_INTRO_WHEN_TO_SHOW = "0.000000" (т.е. удаляем // в начале строки). Файл будет затираться при каждом обновлении пакета шейдеров, но это случается нечасто.

SOQUEROEU – Mega Bezel TV Backgrounds

Как следует из названия, SOQUEROEU – Mega Bezel TV Backgrounds рисует рамку-"телевизор" и накладывает на изображение ЭЛТ-шейдер. Все модели телевизоров вымышленные, стилизованные под дизайн различных консолей. Как я уже сказал, я не фанат такого стиля, но если хотите - скачайте в zip содержимое репозитория и распакуйте его в \Mega_Bezel_Packs. Настройки масштабирования надо выставить аналогично пресетам Duimon.

Настройка ядер и контента

А вот теперь постараемся со всей этой фигней (а папочка RetroArch уже весит почти 4 гига!) взлететь...

Немного теории, или Что такое оверрайды

Вы уже поняли, что настройки RetroArch - тот еще темный лес. А сейчас я вас испугаю еще сильнее: они еще и многоуровневые, и по разным файликам разбитые. Однако, если вы вкурите, как работают конфиги и как они взаимодействуют между собой, вам станет намного проще жить с RetroArch.

Начнем с типов файлов. Их всего четыре:

  • Config - собственно, конфигурация. Имеет расширение .cfg. Основной конфиг по умолчанию называется retroarch.cfg и живет в корне RA.
  • Remaps - позволяет переназначить соответствие кнопок RetroPad и эмулируемой платформы. Имеет расширение .rmp
  • Options - опции ядра. Имеет расширение .opt
  • Shader Presets - пресеты шейдера. Имеют расширения .cgp, .glslp, .slangp в зависимости от выбранного языка

Любую настройку можно переопределить на различных уровнях. Файлы, которые изменяют глобальные настройки, называются Overrrides. Уровней также четыре, и они имеют свою иерархию. В файлах Config и Remaps указываются только отличия от более высокого уровня, а Options и Shader Presets заменяют весь конфиг более высокого уровня целиком.

  1. Прежде всего, загружаются настройки по умолчанию - retroarch.cfg или пресет шейдеров, который мы сохранили как Global Preset.
  2. Затем - настройки на уровне ядра (Core), это файлы с именем, совпадающим с названием ядра. Именно тут могут появляться первые .rmp и .opt файлы.
  3. Затем - на уровне директории контента (Content Directory). Имя файла совпадает с именем папки, в которой лежит ROM-файл игры.
  4. И наконец - настройки конкретной игры (Game). Имя файла конфига должно совпадать с именем ROM-файла.

На словах пока что звучит красиво. Но дальше начинаются нюансы. Первый из них внимательный читатель уже мог заметить. Я нигде не упомянул эмулируемую платформу. Все верно, такого уровня определения настроек попросту нет! В принципе, можно выкрутиться за счет Content Directory. Однако, уточню - в качестве имени Content Directory используется не полный путь к папке, а только ее имя. То есть, если у меня есть папочки Game Boy и Game Boy Color, и все игры лежат в них без подпапок, все хорошо. Но я так не люблю. У меня внутри каждой папки платформы есть еще подпапки: No-Intro, ROM Hacks и Translations. Это попросту закрывает для меня указание настроек на уровне Content Directory.

Старый способ выкрутиться из ситуации - создать клоны ядер при помощи скрипта Core Splitter. Однако, скрипт давно не поддерживается и может поломать нам ядра. Есть другие способы выкрутиться, о которых я расскажу ниже. Я не буду показательно настраивать каждое ядро. Пройдусь по тем, которые сам регулярно использую. Думаю, это уже позволит вам ознакомиться с основными подходами и приемами настройки RetroArch.

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

Что такое RetroPad?

Система настройки управления в RetroArch далека от интуитивной. Чтобы абстрагироваться от кнопок и особенностей конкретного геймпада, вводится промежуточная сущность - RetroPad. Это виртуальный контроллер современного типа, имеющий крестовину, 4 лицевые кнопки, 2 мини-джойстика, 2 бампера и 2 триггера. Можно представить себе обычный Dual Shock или геймпад от Xbox One:

Скрин из документации RetroArch для наглядности

Кнопки реального контроллера или клавиатуры мэппятся на этот самый RetroPad в меню Settings->Input->RetroPad Binds. Эти настройки хранятся в общем конфиге и переопределяются оверрайдами.

На уровне ядра вступают в силу Core Remaps, которые мы задаем в Quick Menu. Здесь уже задается соответствие между кнопками RetroPad и эмулируемого конкретным ядром контроллера. Именно ремапы считаются рекомендуемым способом изменения управления.

Вся эта система работает совершенно прозрачно для обычных XInput геймпадов, они сопоставляются с RetroPad один к одному. С тем лишь исключением, что порядок кнопок ABXY у RetroPad нинтендовский, а не XBox-овский. С нестандартными контроллерами сложнее. В настройке может помочь база автоконфигов, находящихся в подпапке \autoconfig. Однако, автоконфиги имеют ряд недостатков. Во-первых, они ориентируются на имя геймпада в системе, а многие контроллеры при подключении по XInput определяются как-нибудь безлико, наподобие XBox One Controller. Здесь может помочь DirectInput. А во-вторых, умолчальные параметры также могут быть далеки от идеала. Например, у народного 8bitdo M30 кнопки X,Y,A,B мэппятся на одноименные кнопки Xbox-пада, Z и C - на бамперы, а его родные бамперы - на триггеры. Это сделано для соответствия с ядрами Beetle Saturn, FinalBurn и MAME, но, например, в Genesis Plus GX придется повозиться.

NES, Famicom, FDS

Ядро: mesen

Для настройки любого ядра важно открыть какой-нибудь ROM, тогда появится меню Quick Menu. Через него выполняется настройка шейдеров, опций ядра и ремапа управления. Прежде всего, включим шейдеры так, чтобы они включились. Нажимаем кнопку перехода в меню (по умолчанию это Guide на геймпаде, и мне это нравится), откроется то самое Quick Menu. Переходим в подменю Shaders и в нем включаем Video Shaders. Дальше возвращаемся в Main Menu и сохраняем файл конфига.

А дальше я предлагаю вам упростить себе жизнь - сохранить в качестве глобального пресета какой-нибудь CRT-шейдер. У портативок все равно будут свои уникальные параметры, а стационарным консолям можно не выставлять одно и то же каждый раз. Вернемся в меню Shaders, выберем пресет по вкусу (я для простоты возьму шустрый и красивый \shaders_slang\crt\gtu-v050.slangp). Параметры никакие менять не буду, просто выберу Save Preset -> Save Global Preset.

Я знаю, что это Sega Genesis. Просто захотелось показать, как благодаря шейдеру GTU работает тот самый эффект прозрачной воды.

Дальше проведем настройку самого ядра. Идем в Core Options, и в нем:

  • Включаем настройку Shift A/B/X/Y clockwise - поворачивает по часовой стрелке 4 кнопки действия. Это удобно, если вы используете современный контроллер. Кнопки A и B будут лежать под большим пальцем.
  • Включаем Remove Sprite Limit - не аутентично, но устраняет мерцание спрайтов в ряде игр.
  • Включаем FDS: Automatically Insert Disks и FDS: Fast Forward while loading. Первая настройка будет автоматически переворачивать дискету в FDS-играх, а вторая значительно ускоряет обработку данных с образа дискеты.

Эти настройки автоматически сохранятся в mesen.opt, мы не хотим их переопределять для отдельных игр.

А дальше я вам предложу совершить еще одно кощунство - отправиться в Settings->Video->Scaling и переключить там Aspect Ratio в режим 1:1 PAR (16:15 DAR). Этот режим выводит картинку с квадратными пикселями. Собственно, 1:1 PAR это и означает: соотношение сторон пикселя 1:1. Пропорции итогового изображения (Display Aspect Ratio - DAR) для NES/Famicom составят 16:15.

Дело в том, что при выводе на ЭЛТ-телевизоре с пропорциями 4:3 пиксели NES/Famicom вытянуты по горизонтали. Однако, разработку графики вели на рабочих станциях с квадратными пикселями. Одни художники это учитывали, другие - нет. Я предпочитаю по умолчанию выводить квадратные пиксели и создавать оверрайды для игр, где изображение все-таки адаптировали под ТВ. Вам никто не запрещает сделать наоборот :-) Свои настройки я сохраню как оверрайд на уровне ядра: Quick Menu -> Overrrides -> Save Core Overrides.

Шар в "Черепашках" круглый именно в 1:1 PAR

SNES

Ядро: bsnes

Здесь вам также предстоит сделать выбор касаемо соотношения сторон картинки. Я по умолчанию включу 1:1 PAR, но не буду настаивать на таком варианте.

Конами, блин! Круглая хреновина становится круглой только в 1:1 PAR

Следующий момент касается эмуляции Super Game Boy. По умолчанию bsnes эмулирует первый SGB, у которого чуть отличается тактовая частота. Переключимся в режим эмуляции SGB2: Core Options -> Super Game Boy -> Preferred Super Game Boy Bios переключим в Super Game Boy 2 (SGB2.sfc). Означенный файл SGB2.sfc должен лежать у вас в подпапке System, в архивах системных файлов все есть.

Дело за малым - запускать ROM-файлы Game Boy с ядром bsnes. Чтобы меньше возиться, я просто прописал bsnes в Launchbox как доступное ядро для Game Boy:

После этого ядро можно выбрать из контекстного меню:

И запустится полноценная Super Game Boy, со всеми его специальными возможностями:

TurboGrafX-16, TurboGrafX-CD, SuperGrafX

Ядро: Beetle PCE

Здесь я также рекомендую вам выбрать между 4:3 и 1:1 PAR.

Шарик в Devil's Crush круглый только в 1:1 PAR

С TG16 и его модификациями есть одна проблема. Шестикнопочный контроллер под Street Fighter II делали в спешке, и реализован он весьма криво. Игры, которые его не поддерживают, начинают шизеть. Если вы вдруг обнаружите, что игра не реагирует на управление и получает очень странные команды - скорее всего, вы случайно нажали левый триггер, который и переключает 2- и 6-кнопочные режимы контроллера.

Atari Lynx

Ядро: Beetle Lynx

Переходим к портативкам. Поскольку я буду использовать шейдер от Duimon, в настройках Scaling отключаю Integer Scaling, а Aspect Ratio переключаю в Full. Это все я сохраняю как Core Override.

Некоторые игры Lynx предполагали, что игрок будет держать портативку вертикально. Ядро Beetle Lynx позволяет поворачивать изображение, и одновременно с этим будет адаптироваться крестовина - при использовании эмулятора мы же не перехватываем геймпад поперек! По умолчанию ядро само выбирает ориентацию экрана, когда загружена известная игра. Однако, если вы изучаете хоумбрю-сцену, могут возникнуть казусы. В этом случае полезно перевести настройку ядра Auto-Rotate Screen в положение Manual. Поворот будет осуществляться кнопкой Select. Для конкретных игр можно устанавливать фиксированные значения угла поворота и сохранять их как Game Options.

Если вы используете геймпад "с рогами" (а это большинство современных контроллеров), я бы советовал переставить кнопки A и B на нижнюю и левую лицевые кнопки (A и X на контроллере Xbox, B и Y). Таким образом обе они будут у вас под большим пальцем. Также замечу, что в конфиге ядра по умолчанию эти кнопки перепутаны, поэтому вам, скорее всего, потребуется только перевесить кнопку B.

Из четырех имеющихся пресетов я выбрал \Mega_Bezel_Packs\Duimon-Mega-Bezel\Presets\Advanced\Atari_Lynx\Lynx_Alt-[ADV]-[LCD-GRID].slangp. Он имитирует более Lynx первой редакции в сером корпусе, который не так сильно бросается в глаза. Жалко только, рамка не позволяет поиграться с масштабированием - на моем 27" экране изображение для Lynx великовато, а при уменьшении масштаба начинается мозаика.

Однако, шейдер не умеет крутиться вместе с игрой. Если мы запустим с ним любую игру с вертикальным режимом (а их официально вышло целых три: KLAX, Gauntlet и Raiden, причем последняя - после окончания жизненного цикла консоли), то на экране будет растянутая каша. Казалось бы - берем "повернутые" пресеты от Duimon и радуемся жизни. Но нееет. Они умеют крутить само изображение, но без соответствующей адаптации управления. Поэтому для таких игр у нас есть ровно два варианта: либо мы используем пресет и пишем ремапы крестовины для конкретных игр, либо забиваем на красивую рамку и няшные эффекты, отключаем пресет, зато крестовина будет мэппиться автоматически. В принципе, с банальным \shaders_slang\handheld\lcd3x.slangp картинка выглядит тоже неплохо, только не забудьте включить для игры Aspect Ratio - Core Provided:

Mega Duck

Ядро: SameDuck

В принципе, подход тот же. Включаем растягивание картинки, кнопки опционально под большой палец, выбора шейдеров особо нет. Я использовал \Mega_Bezel_Packs\Duimon-Mega-Bezel/Presets\Advanced\Mega_Duck\MegaDuck-[ADV]-[LCD-GRID].slangp - по сути, клон геймбоевского пресета, но изображающий Mega Duck.

Watara SuperVision

Ядро: Potator

Чтобы хоть немного справиться с адским мерцанием спрайтов, в Core Options надо врубить LCD Ghosting. Я ставлю по максимуму - 8 кадров.

Настройки управления есть смысл перенастроить так, чтобы обе кнопки были под большим пальцем.

Шейдер также лучше взять от Duimon. Для использования на компьютере я бы посоветовал пресет \Mega_Bezel_Packs\Duimon-Mega-Bezel/Presets\Advanced\Watara_Supervision\Supervision-[ADV]-[Guest]-[Bezel].slangp. Он основан на ТВ-аддоне TV-Link, однако, использует не всратую тв-линковскую палитру, а весьма умеренную черно-белую. Параметров у шейдера тонна, я оставляю все на месте, только убираю Curvature (изогнутость).

Впрочем, другие ватаровские пресеты тоже весьма достойные:

Game Boy Advance

Ядро: mGBA

Как известно, экран оригинального GBA не имел подсветки. Из-за этого разработчикам часто приходилось выкручивать насыщенность цветов в играх, чтобы на этом тусклом экранчике они выглядели более прилично. Поэтому цветокоррекция - неотъемлемая часть эмуляции GBA. Вторая задача классическая для всеъ портативок - на большом экране GBAшные 240x160 будут смотреться ужасно, а если мы уменьшаем масштаб картинки, хочется чем-то заполнить пустоты вокруг.

Например, в составе RetroArch есть шейдер, рисующий рамку Game Boy Player: \shaders_slang\border\gameboy-player\gameboy-player.slangp. Возьмем его за основу.

Если мы включим Video->Color Correction в настройках ядра, то получим следующую картину:

Однако, ряд шейдеров имеют собственную цветокоррекцию. Вот, например, пресет \shaders_slang\border\gameboy-player\gameboy-player-gba-color+crt-easymode.slangp, который также добавляет эффект ЭЛТ. Любопытно, но именно с GBA ЭЛТ-эффекты весьма популярны.

Есть и пресеты с рамками и ЖК-фильтрами, имитирующие экран любой модели GBA. Например, \shaders_slang\handheld\console-border\gba.slangp:

Скриншот я сделал с масштабом по умолчанию, но вообще им можно управлять

Пресеты от Duimon цветокоррекцией не занимаются. Он предлагает сразу три варианта: рамка в стиле GBA SP + LCD-эффект, рамка в стиле GBA + LCD-эффекти рамка в стиле GameCube + ЭЛТ-эффект. Вот, например, вариант GBA SP (\Mega_Bezel_Packs\Duimon-Mega-Bezel\Presets\Advanced\Nintendo_GBA_SP/GBA_SP-[ADV]-[LCD-GRID].slangp) :

Честно сказать, я сам не остановился ни на одном варианте и перебираю их все по настроению.

Virtual Boy

Ядро: mednafen VB

Ядро поддерживает разные режимы вывода стереоизображения, но для игры на обычном мониторе я предпочитаю все это отключать. Стерео отключено по умолчанию, но если вдруг поменяете настройки и захотите вернуть, комбинация несколько неочевидная: 3D Mode надо установить в значение anaglyph, а уже затем Anaglyph preset - в значение OFF. Я пытался играться с настройками анаглифного изображения, даже описал гайд в своей статье о VB. Однако, дальше пары экспериментов дело не пошло.

Следующим шагом дальше от аутентичности станет переключение палитры (Palette) в тех же опциях ядра. Я предпочитаю заменять вырвиглазную Black & Red на Black & White.

В качестве шейдера для VB у меня давно прижился \Mega_Bezel_Packs\Duimon-Mega-Bezel\Presets\Advanced/Nintendo_Virtual_Boy\Virtual_Boy-[ADV]-[Guest].slangp

Последним вопросом станет управление. Формально контроллер Virtual Boy имеет две крестовины, эдакий предок двух стиков для управления в 3D-играх. Однако, по факту большая часть игр не использует правую крестовину. Так что не парьтесь, висит она по умолчанию на правом стике - и хорошо.

Game Boy, Game Boy Color

Ядро: SameBoy или Gambatte

Здесь нас ждет интересная особенность - ядро мы будем использовать одно, а вот конфиги - разные.

Традиционно для двухкнопочников перенастроим управление под большой палец, этот ремап сохраним как core preset. А дальше - выберем любимый шейдер (мой - \shaders_slang\handheld\console-border\dmg.slangp из поставки RetroArch) и сохраним его командой Save Preset->Save Shader Preset As. После этого введем имя файла (например, gameboy). Наш пресет сохранится как \shaders\gameboy.slangp.

Чтобы не запускать его вручную, пригодится любая адекватная внешняя оболочка. Я использую Launchbox. О его настройке поговорим в другой раз. В нем идем в Tools -> Manage -> Emulators. Откроется список зарегистрированных эмуляторов:

Затем дважды щелкаем по RetroArch, и в открывшемся окне переходим в раздел Associated Platforms. Находим там платформу Nintendo Game Boy и ядро sameboy_libretro:

А дальше прописываем в Extra Command-Line Parameters параметр запуска шейдера: --set-shader "Путь\К\Нашему\Пресету". Путь к пресету может быть абсолютным или относительным от папки \shaders. Я, разумеется, выберу второй путь, и мой параметр будет очень простым:

--set-shader "gameboy.slangp"

После этого все игры платформы Game Boy станут запускаться с няшным шейдером:

Аналогично с Game Boy Color. Мне нравится штатный пресет \shaders_slang\handheld\console-border\gbc-lcd-grid-v2.slangp. Цветокоррекция у SameBoy включена по умолчанию. Поэтому в принципе, я мог бы просто сохранить пресет в gbc.slangp и подключить его аналогично черно-белому Game Boy. Но в педагогических целях давайте настроим шейдер из пресета Duimon, требующий других параметров масштабирования видео.

Загрузив какой-нибудь контент, идем в настройки масштабирования, привычно выключаем Integer Scaling и переводим Aspect Ratio в Full. Затем переходим в Quick Menu -> Overrides -> Save Override as и указываем имя нашего оверрайда. У меня будет gbc_duimon. Файл оверрайда, который будет применен, передается через параметр --appendconfig. Путь к нему можно указать как абсолютный, так и относительный. Но на сей раз относительные пути вычисляются от корня самого RetroArch. Строчка у меня получилась такая:

--appendconfig "config\SameBoy\gbc_duimon.cfg" --set-shader "gbc.slangp"

Теперь, запустив из LaunchBox любую игру GBC, мы сможем полюбоваться нашими настроенными пресетами:

SNK Neo Geo Pocket, Neo Geo Pocket Color

Ядро: Beetle NeoPop

Вы, конечно, можете повозиться с конфигами и настроить разные пресеты для оригинальной NGP и ее улучшенной модели NGPC. Но вот правда - оно вам надо? Выглядят портативки почти одинаково, а для черно-белой версии вышел всего десяток игр.

Лично я не парюсь и использую единый пресет на уровне ядра: \Mega_Bezel_Packs\Duimon-Mega-Bezel/Presets\Advanced/Neo_Geo_Pocket_Color\NGPC-[ADV]-[LCD-GRID].slangp.

Sega Game Gear, Master System, Mega Drive

Ядро: Genesis Plus GX

Вот здесь наступает самая жесть... Мы хотим эмулировать одним ядром сразу три системы, одна из которых портативная, а другая использует контроллер с 6 лицевыми кнопками!

Однако, давайте по порядку. Напомню, как выглядит шестикнопочник для Mega Drive:

Master System и Game Gear используют кнопки B и C (это соответствует тому, как будут работать игры Master System на Mega Drive). Окей, сделаем себе ремап, чтобы эти две кнопки удобно лежали под большим пальцем, сохраним его на уровне ядра. Но как нам подключить этот ремап только для двух платформ из трех? Может, есть какой-нибудь параметр командной строки?

Шиш там!

Никакой возможности указать файл ремапа нет. Автоматически они загружаются только в случае, когда имя файла совпадает с названием игры, папки ROM-файла или ядра. Проблемка... Не доставать же из-за такого кривой core splitter?

Решение будет несколько нестандартным. Идем в \config\remaps и создаем там папку custom_ms_gg. В эту папку переносим папку Genesis Plus GX, в которой лежит файл Genesis Plus GX.rmp. Далее запускаем в RetroArch любой контент с этим ядром, идем в Settings->Directory->Input Remaps и указываем там путь к нашей папке custom_ms_gg. Затем идем в Quick Menu -> Overrides и выбираем там Save Override As. Назовем файл каким-нибудь понятным образом, например, sms_gg.cfg. И вот уже этот файлик пропишем в параметры командной строки для Game Gear и Master System:

--appendconfig "config\Genesis Plus GX\sms_gg.cfg"

Собственно, для Master System строка такой и останется. Дальше приступим к настройке шейдера для Game Gear. Эта портативка - единственная, у которой был ЖК-экран с прямоугольными пикселями. Экран имел DAR 4:3, а если бы пиксели были квадратными, должен был быть 10:9. Однако, конкретно в случае Game Gear я не буду советовать переключиться в PAR 1:1, потому что это будет конфликтовать с прекраснейшим шейдером от Duimon. Однако, для шейдера тоже нужно выправить настройки. Запускаем RA с нашим ядром, отключаем Integer Scaling, переключаем Aspect Ratio в Full. Сохраняем оверрайд под названием gg.cfg. Несколько конфигов можно добавлять при помощи вертикальной черты. Наш параметр для Game Gear примет вид:

--appendconfig "config\Genesis Plus GX\sms_gg.cfg|config\Genesis Plus GX\gg.cfg"

После такого сделать отдельную настройку для шейдера будет несложно. Я возьму \Mega_Bezel_Packs\Duimon-Mega-Bezel\Presets\Advanced\SEGA_Game_Gear\Game_Gear-[ADV]-[LCD-GRID].slangp.

Итоговая строка параметров для Game Gear у меня такая:

--appendconfig "config\Genesis Plus GX\sms_gg.cfg|config\Genesis Plus GX\gg.cfg" --set-shader "gg.slangp"

Так, с восьмибитками разобрались. Переходим к великой и ужасной Sega Mega Drive. Главная ее проблема - контроллер. Во-первых, не верьте в могущество настройки управления Device Type - Joypad Auto. В очень многих играх это самое Auto отказывается переключаться в шестикнопочный режим, так что я бы советовал явно выбрать MD Joypad 6 Button. Это можно сохранить на уровне ядра. Следующей болью станет мэппинг клавиш. По умолчанию он такой (слева кнопки контроллера XBOX, справа Sega):

  • X->A
  • A->B
  • B->C
  • Y->Y
  • LB->X
  • RB->Z

Проблема в том, что многие трехкнопочные игры использовали стрельбу на B (средняя кнопка). Как вариант по умолчанию, я бы советовал "положить" управление набок, чтобы сеговским кнопкам A,B,C соответствовали боксовские Y,X,A. И не стесняйтесь делать ремапы под конкретную игру - все равно мы уже далеко от аутентичности. Для настройки полезно поглядывать вот на эту страничку. На ней собраны списки игр, поддерживающих 6 кнопок, использующих в геймплее кнопку Mode, а также требующих обязательно трехкнопочного режима.

Раз уж заговорил о контроллерах, скажу пару слов про 8bitdo M30. Он "представляется" системе собственным именем только при подключении через DirectInput (включать комбинацией Start+B). В этом случае заработает автоконфиг, но этот самый автоконфиг написан под ядро Beetle Saturn. Для Genesis придется делать собственный ремап; однако, если вы планируете запускать игры Sega только с M30, можете просто сделать общий ремап на ядро. Чтобы не запутаться в кнопках, рекомендую проверять результат хоумбрюшкой Sega Genesis 6 button controller test.

Nintendo DS

Ядро: melonDS, DeSmuME.

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

Здесь все будет зависеть от конкретной игры. Даже выбор ядра - некоторые игры могут корректно заработать только на одном из них. Также, например, только DeSmuME позволяет повернуть ввод курсора на 90 градусов, что полезно для "книжного" режима DS.

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

  • Как в оригинале. Стоит использовать, если вы желаете аутентичности и у вас хороший запас разрешения по вертикали. Ряд игр предполагают вывод общей картинки, разбитой на 2 экрана (например, Contra 4), для них это единственный вариант. Я буду использовать шейдер \Mega_Bezel_Packs\Duimon-Mega-Bezel/Presets\Advanced\Nintendo_NDS\NDS_Vertical-[ADV]-[LCD-GRID]-[Integer].slangp
Пример игры, требующей вертикального расположения экранов - Contra 4
  • Одинаковые окна по горизонтали. Стоит использовать, если в игре в равной мере используются оба экрана, но им не обязательно находиться друг над другом. Для этого я возьму шейдер \Mega_Bezel_Packs\Duimon-Mega-Bezel\Presets\Advanced\Nintendo_NDS\NDS-[ADV]-[LCD-GRID].slangp
  • Один экран единомоментно. Если второй экран используется исключительно для вывода всякой вспомогательной ерунды, вы можете использовать всего один экран, а на второй переключаться по мере необходимости. Хороший вариант для портативок, но на компьютере я бы вообще не советовал его использовать.
  • Гибридный режим. Один экран большой, второй - по соседству маленький. Полезно, когда на втором экране выводится что-то типа мини-карты или статов героя. Почему-то в наборе Duimon для гибридного режима есть только пресет с ЭЛТ-шейдером. Впрочем, свой шарм есть и в нем: \Mega_Bezel_Packs\Duimon-Mega-Bezel\Presets\Advanced\Nintendo_NDS\NDS_Hybrid-[ADV]-[Guest].slangp
  • Книжный режим. Самый сложный для эмуляции. Нет, повернуть картинку может и RetroArch, и шейдер \Mega_Bezel_Packs\Duimon-Mega-Bezel\Presets\Advanced\Nintendo_NDS\NDS_Vertical_Book-[ADV]-[LCD-GRID].slangp, но вот управление при этом не повернется... Нам потребуется ядро DeSmuME, в разделе Input опций которого есть прекраснейший пункт Pointer Rotation, позволяющий повернуть ввод на 90, 180 или 270 градусов. Книжный режим нужен для определенных картриджей, предполагающих активную работу со стилусом. Например, для читалки 100 Classic Books.
Конечно, есть масса других способов почитать классическую англоязычную литературу...

Кстати, не забудьте отключить Run-Ahead для ядер NDS! Он очень плохо с ними работает.


Заключение

Мастер-класс получился весьма длинным, сам не ожидал. Такой вот RetroArch брутальный, если хочется им комфортно пользоваться. Я сам узнал много нового, пока готовил этот материал и настраивал RA с нуля. Надеюсь, и вам он будет полезен.

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