spiiin: (totoro)
Раньше постоянно натыкался на версию открытого движка VCMI, в которой по описаниям не работал AI компа и музыка. Вроде уже работает, но благодаря статье, наткнулся на другой проект Heroes 3 Runner / ExaGear Strategies. Это две версии одного движка - первая старая и бесплатная, вторая платная, но поддерживающая также игры Disciples 2 и Civilization 3. Игры работают через эмулятор, так что поддерживаются любые моды и версии, типа аддонов In the wake of the Gods и неофициальных кампаний Heroes Chronicles.

Особенно приятно, что помимо основной схемы управления с тачпада (продуманной и удобной, кстати), также сделана поддержка горячих клавиш клавиатуры и мыши, так что на Asus Transformer'е вообще получается полноценная эмуляция игры \(^_^)/



Вот так, поиграть в старые Windows-игры выходит на Android'е, а не планшетах с Windows.
Tags:
spiiin: (totoro)
В сети валяются несколько версий эмуляторов NES с открытыми исходниками. В основном это либо едва начатые учебные проекты, либо порты написанного на C универсального эмулятора FCE. Версия под android называется Nesoid, исходники её разбросаны по интернету:
http://sourceforge.net/projects/nesoid/
https://code.google.com/p/androidnes/source/browse/
https://f-droid.org/repository/browse/?fdfilter=nesoid&fdid=com.androidemu.nes

Полные исходники, с библиотекой Emudroid-Common, (без неё при сборке будет ругаться на нехватку файла utils/Log.h) и интерфейсом на Java, есть только на f-droid, там же есть и собранный из них готовый apk, так что для старта лучше выбрать их.

1. Библиотеки на C собирается с помощью Android Native SDK, после установки в папке с Nesoid достаточно набрать ndk-build, чтобы собрать нужные для эмулятора библиотека libnes, libemu и libnativehelper.

2. Для сборки самого эмулятора необходим Android SDK, с доустановленным через SDK Manager Android API 10 (под него по умолчанию собирается эмулятор). Сами Build tools лучше использовать версии > 19.0, потому что на 19.0 компилятор падает с Buffer overflow exception.

3. После установки всех необходимых sdk осталось установить систему сборки Ant, и для него указать в файле (PATH_TO_EMULATOR_SOURCES)/local.properties пути к sdk и ndk, например:
sdk.dir=C:/android-sdk
ndk.dir=C:/android-ndk-r9d


Далее можно собрать эмулятор с помощью команды
ant debug
и установить на подключенное по usb устройство с android:
ant installd

4. После этого при открытии рома эмулятор будет падать из-за ошибки в сигнатуре метода, поэтому в файле common\emumedia.cpp стоит поправить строчку 116:
- env->CallStaticIntMethod(jPeerClass, midSetSurfaceRegion, x, y, w, h);
+ env->CallStaticVoidMethod(jPeerClass, midSetSurfaceRegion, x, y, w, h);

После этого эмулятор будет работать нормально.

5. Что можно добавить в эмулятор полезного?
Практически любую фичу из реализованных в современной версии fceux.
Например, можно вернуть поддерживаемую в FCE опцию автоматической загрузки ips-патчей и проигрывание повторений игры. Если открыть файл romname.nes.ips или romname.nes.fcm, то эмулятор использует его, чтобы открыть игру romname.nes и загрузить данный файл - функция FCEUI_LoadGamе.
Всё, что нужно для активации данной фишки -добавить в GUI эмулятора отображение файлов нужных типов. Они описаны в файле (EMU_PATH)/res/values/arrays.xml:
<string-array name="file_chooser_filters">
  <item>.nes</item>
  <item>.fds</item>
  <item>.zip</item>
  <item>.ips</item> <!-- ips patches -->
  <item>.fcm</item> <!-- movies      -->
</string-array>


6. Можно также начать возвращение скриптовых возможностей. Встроить lua быстро не выйдет, но можно добавить свой обработчик в главный цикл эмуляции процессора X6502. Для этого сначала отредактировать файл (EMU_PATH)/neslib/Android.mk:
#LOCAL_CFLAGS += -DASM_6502  #убрать директиву, которая включает код реализации главного цикла на ассемблере.
LOCAL_SRC_FILES +=x6502.c    #добавить код реализации главного цикла процессора на C.


Дальше можно просто добавить в функцию X6502_Run_c вызов своего кода:
  ...
   CallInjected();  //вызов функции обработки каждый такт процессора.
   _PC++;
   switch(b1) {
   ...

 
Затем надо реализовать обработчик для конкретной игры и сделать распознавание конкретных игр по хэшу при открытии.

7. Можно для теста найти места переключения уровней в Super Mario Bros.
Lua-скрипт для win версии FCEUltra:
function logLevel()
  local logStr = string.format("Level %01X-%01X\n", memory.readbyte(0x75F)+1, memory.readbyte(0x75C)+1)
  print(logStr)
end

memory.registerexec(0xB8A5, logLevel) -- переключение обычных сцен
memory.registerexec(0x845A, logLevel) -- конец мира

8. Если подключить к эмулятору Google Play Services (про это нужна отдельная статья), то можно играть в Марио и получать ачивменты за пройденные уровни ^_^.

Screenshot_2014-07-31-18-43-43

Ссылка на приложение в маркете:
https://play.google.com/store/apps/details?id=com.androidemu.nesachiev
Tags:
spiiin: (totoro)
Если подключить два проводных геймпада как на видео из поста, то появляется проблема с тем, что операционная система планшета выдаёт одинаковые коды нажатий на кнопки крестовины геймпада и их невозможно отличить друг от друга в играх. Проблема упоминается на разных форумах и конкретно в комментариях к видео на ютубе.

После нескольких дней ковыряний удалось разобраться с ней.
- Скачать/купить приложение USB/BT Joystick Center GOLD. Лично у меня купленная последняя версия работать нормально отказалась и регулярно падала в процессе настройки, пришлось качать с 4pda взломанную 0.968.
-  Настройка приложения.
Мануал от разработчиков:

- Нажать кнопку "Создать драйвер" для каждого из джойстиков.
- В настройках драйвера создать кнопки, стики и слайдеры по количеству таковых на джойстике.
- Увеличивать ползунок количества байт управления до тех пор, пока при нажатии на любую из кнопок джойстика какие-либо из бит-лампочек будут загораться (у меня получилось 8 и 32).
- Для каждой из кнопок джойстика проделать следующее - зажать кнопку на джойстике, и, не отпуская её, выделить на экране все загоревшиеся биты-лампочки. После отпускания нажать ту же кнопку еще раз и убедиться, что все загорающиеся лампочки выделены точками.
- После настройки всех кнопок всех джойстиков, на экране добавления джойстиков надо привязать каждую из кнопок джойстиков на какую-либо из клавиш клавиатуры планшета. Делается это также - зажимается кнопка и, не отпуская её, нажимается кнопка на клавиатуре.
- После всех настроек очень рекомендуется сохранить конфигурацию драйвера в файл (кнопка Save).
- Во время установки программа добавит новое устройство ввода USBJoyIME, чтобы нажатия на джойстик считывались ОС, надо переключиться на него. Напрямую сделать это на Asus Transformer нельзя (при подключенной док-станции, она всегда активируется как единственный доступный метод ввода), но можно включить его кнопкой "IME" из самой программы. Подключенная клавиатура при этом работать перестаёт, зато начинают джойстики.
- Дополнительно в эмуляторах Nesoid, Gensoid и Snesoid (у них одинаковое окно настроек), надо зайти в окно Other Settings и включить галочку Use Additional input method. (Этот вопрос тоже несколько раз проскакивал на форумах).
- Теперь в самом эмуляторе или игре остаётся просто зайти в настройки управления и назначить кнопки джойстиков в качестве управляющих.
Tags:

Profile

spiiin: (Default)
spiiin

July 2017

S M T W T F S
      1
2345 678
9101112131415
16171819202122
23242526272829
3031     

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 24th, 2017 06:36 am
Powered by Dreamwidth Studios