четверг, 30 июня 2016 г.

[MAME] Модификация MAME - поддержка XPadder, QuickSave, убирание надписей при сохранение/загрузке, пауза при вызове меню и прочее


  Собственно здесь я приведу различные небольшие модификации исходного кода MAME, которые дают различные полезные плюшки. Код у MAME в основном написан на C++, и подразумевается что вы хотя бы слегка знакомы с этим языком или с программированием в целом. Ничего особо сложного делать не придётся, но понимать что к чему очень желательно. Также я не стал делать никаких diff или указывать номера строк, чтобы изменения можно было относительно легко вносить в любые версии MAME.

Актуально для версии: 0.175

• Включение DirectInput - поддержка XPadder и других программ, эмулирующих клавиатуру.

  В последних версиях MAME поддержка DirectInput добавлена как отдельная опция. Достаточно запустить MAME с аргументами "-keyboardprovider dinput".

  Если вы попробуете использовать с MAME XPadder или любую другую программу, эмулирующую нажатие клавиш на клавиатуре, то вас ждёт облом. С какими-то туманными целями поддержка DirectInput в MAME по-умолчанию отключена и он понимает только физические нажатия. К счастью это легко лечится.

Файл: osd\windows\input.cpp
В самом начале меняем строчку "#define FORCE_DIRECTINPUT   0" на "#define FORCE_DIRECTINPUT   1".

• Упразднение надписей при сохранение/загрузке.

  При сохранение и загрузке MAME аршинными буквами пишет всякую полезную инфу на пол экрана. И очень быстро это штука начинает бесить дико и вполне основательно. Искоренить её очень просто.
Файл: emu\machine.cpp
Находим строчку с текстом "case STATERR_NONE:". Весь блок для break меняем на:
if (m_saveload_schedule != SLS_LOAD) {
  if (!(m_system.flags & MACHINE_SUPPORTS_SAVE))
    popmessage("Unsupported.");
  else
    popmessage("Saved.");
}

Файл: frontend\mame\ui\ui.cpp
Находим строчку с текстом "// display a popup indicating that the save will proceed". Удаляем или комментируем две строчки с вызовом popmessage, идущие ниже.

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

• Пауза при вызове меню.

  В документации MAME явно прописано: вызываем меню, а затем при необходимости вручную ставим паузу. Очень удобно, что сказать. Сделаем так, чтобы всё было автоматом.
Файл: frontend\mame\ui\ui.cpp
Находим строчку с текстом "// turn on menus if requested". Добавляем код в if-блок до return:
if (!is_paused)
  machine().pause();

Файл frontend\mame\ui\menu.cpp
Находим строчку с текстом "// if the menus are to be hidden, return a cancel here". Добавляем код в if-блок до return:
if (mui.machine().paused())
  mui.machine().resume();

• Прозрачный фон для сообщений.

  Мелочь а приятно.

Файл: frontend\mame\ui\ui.cpp
Находим метод "ui_manager::popup_time". Заменяем "messagebox_backcolor = UI_BOX_COLOR;" на "messagebox_backcolor = rgb_t(0x77,0xcc,0xcc,0xcc);". Можно поиграться с цветами на свой вкус.

• Быстрые сохранения.

  Обязательный выбор слота при сохранении это так удобно, так прекрасно. На хрен такое счастье.
Файл: emu\ui\ui.cpp
Находим два метода: "mame_ui_manager::start_save_state" и "mame_ui_manager::start_load_state", комментируем или удаляем в них две строчки вида "machine.pause();".
Находим метод "mame_ui_manager::handler_load_save".
Комментируем или удаляем всё, что идёт после комментария "okay, we're waiting for a key to select a slot; display a message" и до "display a popup indicating that the save will proceed".
Вместо этого вставляем:
file = '1';
sprintf(filename, "%c", file);
Можно также закомментировать или удалить строчку:
machine.resume();
Теперь сохраняться будет только в файл с именем '1'.

Комментариев нет:

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