Видео ролики бесплатно онлайн

Смотреть русский видео

Официальный сайт travelspo 24/7/365

Смотреть видео бесплатно

21.06.10 20:59 Uzix

Linux GamesЭмуляция древних консолей

Многие из нас в 90-е годы имели приставку типа Денди или Сега. Не открою америку, если скажу, что на любом компьютере старше 486sx можно путем программной эмуляции погамать в любимые игрушки. Сейчас я хочу рассмотреть эту тему подробнее. Итак, что нам нужно (для определенности будем дальше работать с консолью NES (ака Денди), но аналагично и для других приставок):

Эмулятор
Это - наш главный инструмент, как скальпель для хирурга и как vim для программиста :) От выбора эмулятора зависит то, насколько комфортно нам будет играть и будет ли вообще игра доставлять удовольствие. Для Linux выбор эмуляторов не так широк как хотелось бы, но для неискушенного пользователя вполне хватит. Мною был выбран Mednafen в первую очередь за универсальность. Он поддерживает кучу различных консолей начиная от всеми известной Денди и заканчивая экзотическим Watara Supervision. Но к сожалению в этом списке пока нет Сеги и Супер Нинтендо :( (может быть кто желает помочь автору с этими консолями?). Главной недостаток и в то же время главное достоинство этого эмулятора - отсутствие какого-либо графического интерфейса в стандартной поставке. С данным вопросом мы разберемся во второй части статьи, а пока опробуем его. Запускаем из консоли, параметром указываем РОМ с игрой, скачанный предварительно с любого из сотен сайтов по этой тематике.
thumb.png
Первый вопрос, который хочется задать: а что тут с управлением? По системным кнопкам информацию можно получить через F1. Из интересных комбинаций тут у нас alt+s для включения возможностей прокрутки назад (о! как этого нехватало на железной Денди, особенно в Battletoads!) и alt+shift+1 для настройки кнопок первого джойстика Денди. Нас попросят по очереди нажать на клавиатуре или джойстике кнопки, соответствующие кнопкам джойстика Денди. Всего на одну кнопку Денди можно назначить до четырех кнопок джоя/клавиатуры. Я назначил стрелки на крестовину, Z и X на A и B, Space на Select и Enter на Start, также задал и соответствующие кнопки железно джойстика Денди, подключенного через переходник на LPT.
С управлением разобрались, теперь второй вопрос на повестке дня - графика. Действительно, умолчальные настройки выглядят весьма непривлекательно. Чтобы подкорректировать их нам придется залезть в конфигурационный файл ~/.mednafen/mednafen.cfg. Пару слов о формате файла: большинство настроек задается отдельно для каждой консоли в виде "консоль.подсистема.параметр значение". Я рассмотрю настройку для Денди(NES), но для других консолей все аналогично. Нас интересует один блок настроек, далее я его приведу с комментариями?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
;Разрешение в полноэкранном режиме - ширина
nes.xres 1280
;Разрешение в полноэкранном режиме - высота
nes.yres 800
;Ширина в оконном режиме = 256*это_число
nes.xscale 2.2
;высота в оконном режиме = 240*это_число (или 224 в зависимости от игры)
nes.yscale 2
;Ширина в полноэкранном режиме = 256*это_число
nes.xscalefs 3.4
;высота в полноэкранном режиме = 240*это_число (или 224 в зависимости от игры)
nes.yscalefs 3
;Использовать т.н. scanlines - число - это их процент на экране. Эмулирует вид как на старых телевизорах. вобщем легче посмотреть чем объяснить.
nes.scanlines 8
;Растягивать на весь экран в полноэкранном режиме - тогда параметры nes.xscalefs и nes.yscalefs не используются. ИМХО - на ЖК мониторах лучше смотрится нерастянутое изображение.
nes.stretch 0
;Биллинейная интерполяция - сильно замыливает изображение, рекомендуется только если программные фильтры процессор не вытягивает а scanlines не нравятся
nes.videoip 0
;Программные фильтры. Тут на вкус и цвет. В ассортименте none, scale2x, hq2x, nn2x, nny2x. вместо 2х можно 3х и 4х - тогда изображение будет контрастнее на больших разрешениях и загрузка процессора больше.
nes.special scale2x
;Фильтр OpenGL, чтобы работало нужно параметр "video sdl" заменить на "video gl". варианты: ipxnoty, ipynotx, ipsharper, ipxnotysharper, ipynotxsharper, scale2x (3x/4х/6х/8х)
nes.pixshader none

Все, можно было бы играть, но через консоль запускать неудобно. Нужен комфорт :) И в этом нам поможет...

Каталог
Я бы выделил две категории эмуляторщиков - первые долго бродят по различным онлайн каталогам игр, затем скачивают и запускают понравившуюся игру. С этим все понятно - кликнул на игре, запустился эмулятор и играй. Вторые же как правило скачивают полный набор Good* (реже No-Intro) с целью получить все и сразу. Вот тут здорово помогут каталогизаторы. В свое время я использовал QuickPlay - всем он хорош, но только для Windows. Отсутствие каталога в любимой ОС здорово усложнило задачу - нужно было зайти в папку с архивами, найти нужный, найти файл в нем и наконец запустить игру. Но вскоре чудом (учитывая неразрекламированность проекта) был найден Gelide.
thumb.png
На офсайте можно скачать готовые пакеты под Debian, хотя не так давно мне приходилось компилировать вручную.
Итак, главное его умение - показывать список игр, разделенный по консолям (есть и другие фильтры). Как дополнительные плюшки - он может показывать некоторую полезную информацию о ROM'е и фотки картриджа. Последних у меня не оказалось, поэтому все кроме списка игр, консолей эмуляторов было благополучно убрано. Дальше нам надо добавить наш GoodNES (предварительно найденный и скачанный на просторах сети) в каталог. Тут есть несколько вариантов - в контекстном меню пункта "Nintendo NES" выбираем "Edit" и в открывшемся окне поле "Roms Directory" задаем путь до нашего распакованного ГудНЕСа. Другой вариант - распаковываем прямо в ~/.gelide/Nintendo Nes/roms/. Но так как у меня была необходимость играть и в других ОС, то я выбрал вариант символических ссылок (замечу, что это удобно еще и при перемещении нашей коллекции в другое место - достаточно обновить симлинки и не надо беспокоиться о настройках Gelide).
Итак, GoodNES распакован, теперь нужно в контекстном меню нашей приставки выбрать пункт "Refresh" и вауля - в основной части окна появились наши заветные игры. Однако тут нас ждет большой облом - Mednafen не понимает архивы! Тут можно опустить руки, бросить все и пойти старым путем - запускать игры через файловый менеджер. Но нас-то такими мелочами не остановишь :) По-быстрому был написан скрипт-оболочка для наших эмуляторов:
(Маленькое отступление: в архивах GoodNES с игрой кладется куча разных версий РОМа в т.ч. графических хаков, овердампов [o*], бэддампов [b*] и т.д. Естественно, брать первый попавшийся не получится т.к. вполне можем запустить нерабочий РОМ о чем узнаем при зависании где нибудь на последнем уровне :) )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/bin/sh

# Name: emu-arc
# Author: Uzix ([email protected])
# Description: Script for run ROM's from GoodMerged-archives

sel_rom () {
        IFS="" ARC_ALLFILES=`7z l -slt "$ARC_PATH" | grep 'Path = ' | gawk -F ' = ' '{print $2}'`
        ARC_FILE=`echo $ARC_ALLFILES | grep -v '(VS)' | grep -v '(Beta)'                 | grep -v '\[T' | grep '\[!'     | grep '(U' | head -n1`
test -z "$ARC_FILE" &&\
        ARC_FILE=`echo $ARC_ALLFILES | grep -v '(VS)' | grep -v '(Beta)'                 | grep -v '\[T' | grep '\[!'     | grep '(J' | head -n1`
test -z "$ARC_FILE" &&\
        ARC_FILE=`echo $ARC_ALLFILES | grep -v '(VS)' | grep -v '(Beta)'                 | grep -v '\[T' | grep '\[!'                 | head -n1`
test -z "$ARC_FILE" &&\
        ARC_FILE=`echo $ARC_ALLFILES | grep -v '(VS)' | grep -v '(Beta)' | grep -v '\[b' | grep -v '\[T' | grep -v '\[o'  | grep '(U' | head -n1`
test -z "$ARC_FILE" &&\
        ARC_FILE=`echo $ARC_ALLFILES | grep -v '(VS)' | grep -v '(Beta)' | grep -v '\[b' | grep -v '\[T' | grep -v '\[o'  | grep '(J' | head -n1`
test -z "$ARC_FILE" &&\
        ARC_FILE=`echo $ARC_ALLFILES | grep -v '(VS)' | grep -v '(Beta)' | grep -v '\[b' | grep -v '\[T' | grep -v '\[o'              | head -n1`
test -z "$ARC_FILE" &&\
        ARC_FILE=`echo $ARC_ALLFILES | grep -v '(VS)' | grep -v '(Beta)' | grep -v '\[b' | grep -v '\[T'                  | grep '(U' | head -n1`
test -z "$ARC_FILE" &&\
        ARC_FILE=`echo $ARC_ALLFILES | grep -v '(VS)' | grep -v '(Beta)' | grep -v '\[b' | grep -v '\[T'                  | grep '(J' | head -n1`
test -z "$ARC_FILE" &&\
        ARC_FILE=`echo $ARC_ALLFILES | grep -v '(VS)' | grep -v '(Beta)' | grep -v '\[b' | grep -v '\[T'                              | head -n1`
test -z "$ARC_FILE" &&\
        ARC_FILE=`echo $ARC_ALLFILES | grep -v '(VS)'                    | grep -v '\[b'                                  | grep '(U' | head -n1`
test -z "$ARC_FILE" &&\
        ARC_FILE=`echo $ARC_ALLFILES | grep -v '(VS)'                    | grep -v '\[b'                                  | grep '(J' | head -n1`
test -z "$ARC_FILE" &&\
        ARC_FILE=`echo $ARC_ALLFILES | grep -v '(VS)'                    | grep -v '\[b'                                              | head -n1`
test -z "$ARC_FILE" &&\
        ARC_FILE=`echo $ARC_ALLFILES                                                                                                  | head -n1`
test -z "$ARC_FILE" &&\
        echo E: Could not find any file in archive. &&\
        exit 4
}

ARC_PATH=$1
ARC_EMU=$2
ARC_NAME=`echo "${ARC_PATH}" | gawk -F'/' '{print $NF}'`
ARC_TYPE=`echo "${ARC_NAME}" | gawk -F'.' '{print $NF}'`
ARC_FILE='/dev/null'
echo I: Archive patch: ${ARC_PATH}
echo I: Archive name: ${ARC_NAME}
echo I: Archive type: ${ARC_TYPE}

if [ ! -r "${ARC_PATH}" ]; then
    echo E: Archive not readable
    exit 1
fi

case "${ARC_TYPE}" in
    7z|zip|rar)
                if [ ! -x "`which 7z`" ]; then
                        echo E: 7z archiver not found. Please, install it.
                        exit 2
                fi
                sel_rom
                7z e -y -o"${HOME}" "${ARC_PATH}" "${ARC_FILE}"
                ;;
    *)
        echo E: Unrecognized archive type
                ARC_FILE="${ARC_NAME}"
                ln -fs "`pwd`/${ARC_PATH}" "${HOME}/${ARC_FILE}"
                ;;
esac

ARC_FTYPE=`echo "${ARC_FILE}" | gawk -F'.' '{print $NF}'`
echo I: Selected file: ${ARC_FILE}
echo I: Selected file type: ${ARC_FTYPE}
if [ ! -x "`which "${ARC_EMU}"`" ]; then
        case "${ARC_FTYPE}" in
            nes|fds|sms|gg|gb|gbc|gba|ws|wsc|pce|ngp|ngc)
                        for i in mednafen; do
                                test -x "`which $i`" &&  ARC_EMU="$i"
                        done
                        ;;
            bin|smd)
                        for i in dgen gens; do
                                test -x "`which $i`" &&  ARC_EMU="$i"
                        done
                        ;;
            smc)
                        for i in bsnes snes9x zsnes; do
                                test -x "`which $i`" &&  ARC_EMU="$i"
                        done
                        ;;
        esac
fi
if [ -z "${ARC_EMU}" ]; then
    echo E: Could not find suitable emulator
    exit 3
fi
echo I: Selected emulator: ${ARC_EMU}
xdg-screensaver suspend `xwininfo -root |grep id\: | awk '{print $4}'`
"${ARC_EMU}" "${HOME}/${ARC_FILE}"
xdg-screensaver resume `xwininfo -root |grep id\: | awk '{print $4}'`
rm "${HOME}/${ARC_FILE}"
exit 0
 

Что он делает? Он смотрит содержимое архива с помощью 7z, выбирает наилучший РОМ (функция sel_rom), распаковывает его, ищет подходящий эмулятор и запускает все это. Помещаем скрипт в /usr/local/bin/ и даем ему +x. Теперь нужно добавить скрипт в Gelide в качестве эмулятора. Для этого вызываем контекстное меню во фрейме с эмуляторами и жмем "Add". Заполняем примерно так:
thumb.png
Готово! Теперь можно и поиграть! выбираем любимую игру, выбираем скрипт emu-arc и... В БОЙ! :-)

P.S. Не злоупотребляйте сохранениями :)
P.P.S. Если будет необходимость, добавлю описание настройки dgen (эмулятор сеги) и zsnes (супер нинтендо)
P.P.P.S. Первый пост.



Zereal 21.06.10 21:11 # +0
Написано здорово, но Вас не затруднит воспользоваться тегом /cut? :))
Uzix 21.06.10 21:12 # +1
Извиняюсь, исправил.
Zereal 21.06.10 21:13 # +0
спасибо :)
K-9 21.06.10 21:28 # +0
Ну не знаю, насколько это Ъ, но все это легко делается через GUI. Кстати, все Good-утилиты в имя лучшего рома вставляют "[!]"
Uzix 21.06.10 21:35 # +0
Вставляют, но не для всякой игры есть [!]. Или наоборот - их может быть несколько.
K-9 21.06.10 21:29 # +1
Честно, это все легко делается через GUI. Но если уж на то пошло, то "ложим скрипт" попрошу исправить
vyazovoi 22.06.10 09:46 # +0
Тысяча чертей! Отличный каталог, спасибо!
inst 22.06.10 11:33 # +0
Автор, спасибо за статью.

Я где-то в интернете читал о том, что играть в SEGA можно по сети. Если не ошибаюсь, речь шла об эмуляторе Gens, причём скорее всего о версии под офтопик, ибо у себя в Ubuntu я не вижу никаких настроек связанных с сетью.

Скажите, вам что-нибудь известно по поводу игры по сети?
K-9 22.06.10 12:45 # +0
Гуглить в стороны Kaillera, сам никогда не пробовал
Uzix 22.06.10 15:09 # +0
К сожалению Linux-версия Gens не поддерживает игру по сети т.к. в Gens она реализована через Kaillera, который для Linux недоступен. А вот в Mednafen вполне можно поиграть по сети, нужно только установить сервер.
mutantcornholio 22.06.10 21:39 # +0
mednafen поддерживает игру по сети. Автор, случайно, это не ковырял?
Uzix 23.06.10 14:57 # +0
Случайно ковырял. качаем Mednafen Server отсюда, распаковываем, собираем, запускаем. В mednafen нажимаем T, вводим /server 127.0.0.1. Второй игрок вводит айпишник сервера. Вроде все. РОМы должны быть одинаковыми.
devl547 23.06.10 13:39 # +2
OMG! Обоина из Win9x
sandros10 06.09.10 10:49 # +0
Непонятно как менять клавиши, в какой последовательности они меняются и почему 24 варианта, где прыжок?

Лучшие блоги (все 141)
Топ пользователей Топ блогов
Топ пользователей Топ блогов
Элита (все 2825 из 215 городов)
Топ пользователей Топ блогов
welinux.ru

В хорошем качестве hd видео

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн