Мой блог - Эмуляция консоли Super Nintendo в современных дистрибутивах Linux (сборка Snes9X)

Эмуляция консоли Super Nintendo в современных дистрибутивах Linux (сборка Snes9X)

В современных дистрибутивах Ubuntu Linux больше нет единственного нормального эмулятора Super Nintendo под названием Snes9X. Стоит отметить, что есть конечно и универсальные комбайны которые позволяют сразу же эмулировать множество консолей, но у всех у них есть ряд недостатков и если посмотреть на Windows-платформу, то при создании сборников игр именно Snes9X используется в качестве эмулятора по умолчанию. И хотя из за ряда несовместимостей пакета Snes9x больше нет в поставке по умолчанию, мы можем его собрать с некоторыми приседаниями.

Фотография автора

Автор: Антон Черноусов
Опубликовано: 2 месяца (последние правки: 0 минут назад) - 0 комментариев
Категории записи: Game console emulation, Games, Linux, Рабочие станции


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

Скриншот из игры Zelda

Основная проблема с которой вы столкнетесь попытавшись собрать это приложение из исходных кодов, это неподдерживаемая более библиотека libpng12, в современных дистрибутивах Ubuntu Linux используется уже libpng16, а устаревшая библиотека удалена из поставки и попытка собрать Snes9x из исходных кодов с гитхаб вызовет ошибку:

../screenshot.o: In function `S9xDoScreenshot(int, int)':
screenshot.cpp:(.text+0xa2): undefined reference to `png_set_longjmp_fn'

И это еще честно говоря не все с чем мне пришлось столкнуться пока я настраивал эмулятор, но пожалуй расскажу обо всем по порядку и начнем с библиотеки libpng12, но честно говоря можно обойтись и без нее, ведь она используется исключительно для работы со скриншотами. Если вы все же решили ее использовать, то она вполне себе собирается из исходных кодов с github (https://github.com/glennrp/libpng/archive/libpng12.zip), но обязательно установите ее с префиксом в отдельный каталог в /usr/local/lib:

# wget https://github.com/glennrp/libpng/archive/libpng12.zip
# unzip ./libpng12.zip
# cd ./libpng-libpng12/
# ./configure --prefix=/usr/local/lib/libpng12
# make && make install

Обязательно установите необходимые для сборки приложения библиотеки и заголовочные файлы:

# apt-get install git build-essential
# aptitude install minizip libminizip-dev
# apt-get install zlib1g-dev libpng12-dev xorg-dev

Вероятно это не все необходимые библиотеки и просто у меня уже большая часть была установлена, а сейчас мы переходим к сборке консольной утилиты snes9x из официального гитхаба (https://github.com/snes9xgit/snes9x):

# git clone https://github.com/snes9xgit/snes9x.git
# cd ./snes9x/unix/
# autoconf
# ./configure --enable-netplay --enable-netplay LDFLAGS="-L/usr/local/lib/libpng12/lib/" CFLAGS="-I/usr/local/lib/libpng12/includes/"
# make
# make install

Или как я уже говорил, вы можете просто отключить модуль снимков экрана добавив соответствующую опцию к параметрам configure:

./configure --disable-screenshot --enable-netplay

Консольной версией утилиты имеет смысл пользоваться только для ряда экзотических случаев (например я делал превьюшки заставок запуска библиотеки игр), а в реальной жизни хотелось бы получить что-то более "графическое" и мы сейчас соберем GTK-Frontend, для чего перейдите в каталог gtk в корне репозитория исходных кодов проекта и скомпилируйте графический фронт-енд:

# cd ..
# cd gtk
# ./autogen.sh
# ./configure
# make
# make install

Как вы видите после конфигурации, приложение собирается под GTK версии 2 и это тоже проблема:

Snes9x will build with support for the following:

    GTK+ 2.0
    ALSA
    PulseAudio
    OpenGL
    XVideo
    XRandR
    Joysticks
    NetPlay

Я нашел на blogspot описание того, что возможно собрать snex9x-gtk с экспериментальной поддержкой GTK3 (http://maxolasersquad.blogspot.ru/2013/09/compiling-snes9x-on-ubuntu.html), но эта запись была написана в 2013-ом и видимо четыре года назад, что то и работало, но сейчас только GTK2, только хардкор. Попытка собрать с экспериментально поддержкой GTK3 заканчивается ошибкой:

src/gtk_s9xwindow.h:87:9: error: ‘GdkDrawingContext’ does not name a type
         GdkDrawingContext *gdk_drawing_context;

Приложение автоматически интегрируется в системное меню и лишних движений по созданию иконки делать не придется и сразу переходим к больной тебе устаревших GTK-приложений. Собственно почему, я говорю, что GTK2 в современных Linux-дистрибутивах становится проблемой? Лучше я вам просто скриншот покажу.

Ошибки отображения элементов меню GTK2

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

Смена темы оформления GTK-2 приложений в KDE

Просто смените тему оформления GTK+ 2.x на Raleigh:

Смена темы оформления GTK-2 в KDE Neon

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

Исправленное GTK-оформление.

Кстати на этом скриншоте я привел пример моих настроек графических фильтров и именно с такими настройками играть можно.

Пожалуйста, оцените мою статью (всего оценок 1, средняя оценка 5.00):

Комментарии к статье:

Пока комментариев нет

Оставьте комментарий:

обязательно

обязательно (не публикуется)

необязательно

обязательно

обязательно