Автор Тема: Скриптинг в эмуляторах.  (Прочитано 5509 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн spiiin

  • Модератор
  • Сообщений: 760
    • Просмотр профиля
Скриптинг в эмуляторах.
« : 26 Ноябрь 2012, 02:54:15 »
Давно в голове крутилась такая идея - взять эмулятор одной из старых консолей с поддержкой скриптов, добавить в его систему парсинга команд специальный опкод, по которому будет срабатывать передача управления в скрипт. Дальше вместо стандартного процесса хака делать следующее - дизассемблированную функцию переписать на скриптовом языке и стереть её из ROM, заменив тело на опкод вызова скриптовой функции (для этого хватит пары байт), оставшееся место использовать для своих нужд. Из скрипта есть доступ к любым функциям эмулятора (а если и нет, можно прокинуть нехватающие).
Так можно переписать все основные системы игры - управление, интеллект врагов, форматы описания уровней, тексты etc. Всё необходимое для модификации. На выходе получится практически чистый ROM с частью технических неинтересных для модификации функций в нём, и движок игры в читабельном виде на языке высокого уровня.
Сложность переписывания кода на скриптовом языке намного меньше, чем переписывания алгоритма на ассемблере.
Но главные плюсы в том, что снимаются ограничения на размеры данных и кода, которых всегда не хватает, а также в том, что можно удобно тестировать переписанный код, модифицируя его без перезапуска игры и работать над скриптом совместно.
Так еще никто не делал :)

Для теста переписал небольшую часть логики прыжков Черного Плаща под новую версию эмулятора. Изменённый эмулятор, скрипт и ром в приложении. Если кто-то заинтересуется таким подходом к хакингу, буду рад объяснить подробнее :)

Оффлайн dekster88

  • Пользователь
  • Сообщений: 277
  • Пол: Мужской
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #1 : 26 Ноябрь 2012, 08:36:18 »
из всего прочитанного понял только фразу "Черного Плаща" o_0

Оффлайн Lomax

  • Ушел с форума
  • Сообщений: 3191
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #2 : 26 Ноябрь 2012, 09:48:39 »
dekster88, а я только "буду рад". А кто такой Черный плащ? :lol:
Добавлено позже:
spiiin, а это какой язык программирования? Можно на него где нибудь инструкции посмотреть и синтаксис?) Я бы после котов поразбирался бы, посидел)
« Последнее редактирование: 26 Ноябрь 2012, 11:12:27 от Lomax »

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #3 : 26 Ноябрь 2012, 12:05:58 »
Идея отличная, но скриптами тоже надо уметь писать.

Но есть и минусы - привязка хака к эмулятору и скрипту, то есть игроки не смогут поиграть на железе и других эмуляторах. (Зато можно сделать билд эмулятора без возможности сейв-лоада  :D )
Также нечестные игроки могут взять и скрипт изменить, изменив суть хака, включать бессмертие, менять XY персонажей и т.п. 
А сами искать читы не все умеют, тем более в роме менять.

Оффлайн spiiin

  • Модератор
  • Сообщений: 760
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #4 : 26 Ноябрь 2012, 13:02:04 »
Ti_, защищаться от читеров смысла нет никакого, а то что скрипт можно изменить - это плюс, а не минус же. привязка к эмулятору это не очень прикольно конечно, но думаю можно без проблем попросить добавить мои изменения в официальную сборку FceUltra, особенно если будет несколько игр хотя бы, которые используют такую фишку.
Я еще посмотрю, в каком состоянии порты этого эмуля на телефоны, можно и для них запихнуть при желании, мощности должно хватить с головой.

Lomax, http://www.lua.org/ . примеры скриптов есть в папке с эмулятором fceu, ну и мой можешь глянуть в архиве. также есть эмуляторы сеги, snes и gba с его поддержкой.

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #5 : 26 Ноябрь 2012, 13:04:02 »
Так еще никто не делал :)
Идея не нова... почему не делал конкретно я. С точки зрения железа это бессмысленно.
Даже с точки зрения эмуляторов - привязка к одному эмулятору.

Что я уже делал скриптами:
1) делал фиолетовый фон в сеге, для спрайто-рипперов.
2) выдерал архивы из UMK3, с помощью его самого ^^. (то есть не пришлось писать распаковщик. сама игра распаковывала). А потом скриптом для IDA коментировал и скрывал участки с архивами... что бы на них не смотреть, и их не проматывать.
3) делал риппер зон для Sonic Knuckles.
4) ещё полюбому есть то, чего просто забыл.
вот последний скрипт:
http://www.emu-land.net/forum/index.php/topic,6841.msg892382.html#new

Отлаживать скриптами очень удобно.

Оффлайн spiiin

  • Модератор
  • Сообщений: 760
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #6 : 26 Ноябрь 2012, 13:12:03 »
r57shell
на железе сейчас играют единицы, в массе все с компьютеров или смартфонов.
идея в том, чтобы подменять всю логику игры с ассемблера на скрипт. в основном чтобы делать новые уровни для игр, раньше скрипты только для вспомогательных задач использовали, типа тех что ты написал.

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #7 : 26 Ноябрь 2012, 13:51:04 »
мне до лампочки до тех, кто играет на эмуляторах.
к тому, же как я уже говорил, такой скриптинг - только под конкретный эмулятор, это раз.
второе, даже возможно под конкретную сборку. это возможно не редкость, что в PC версии есть луа скрипты, а под телефон или ещё что - нету.

Онлайн Mr2

  • Пользователь
  • Сообщений: 1582
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #8 : 26 Ноябрь 2012, 14:53:48 »
r57shell
на железе сейчас играют единицы, в массе все с компьютеров или смартфонов.
Согласен. Не знаю как обстоят дела с копированием игр на картридж, но думаю что хуже чем с копированием на болванку. :D
идея в том, чтобы подменять всю логику игры с ассемблера на скрипт. в основном чтобы делать новые уровни для игр, раньше скрипты только для вспомогательных задач использовали, типа тех что ты написал.
Была похожая идея(Ответ #339).

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #9 : 26 Ноябрь 2012, 15:12:20 »
Но думаю можно без проблем попросить добавить мои изменения в официальную сборку FceUltra, особенно если будет несколько игр хотя бы, которые используют такую фишку.
Хах, попросить сменить БедОпкод на фишку для поддержки игр, причем даже не игр, а хаков! Не будет этого точно в оф.сборках, эмулятор ориентированы на точность потому что и эмуляцию оригинальных игр, а не хаков.
Они даже опцию 'разгона' добавлять не хотят, а ты предлагаешь заменить опкод который типо 'эмулируется'.

Но раз так делать хакнутый эмуль, раз он всё равно несовместим ни с чем будет, можно и оперативку расширить и спрайты если возможно. (мерцание не дает нормально делать уровни)

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #10 : 26 Ноябрь 2012, 15:17:56 »
для сеги можно не менять эмулятор gens_11b, достаточно поставить callback по адресу, а там вообще может стоять один только rts.

Оффлайн lupus

  • Пользователь
  • Сообщений: 3809
  • Пол: Мужской
  • man with no face
    • ВКонтакте
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #11 : 26 Ноябрь 2012, 15:40:46 »
Да, идея не нова, но весьма интересна, я когда-то прикручивал чужой скрипт к первому метроиду, что позволяло пользоваться картой и прочими прелестями, без которых игру пройти очень и очень сложно.
Про явные минусы уже писали - привязка к конкретному эмулятору под конкретную платформу, а я на пк не играю вообще :/

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #12 : 26 Ноябрь 2012, 16:06:23 »
для сеги можно не менять эмулятор gens_11b, достаточно поставить callback по адресу, а там вообще может стоять один только rts.
Хитро.
А у меня появился вопрос по скриптам, допустим я создам список оффсетов рома в скрипте, и мне нужно чтобы подсчитывало, сколько раз запускался код по этим оффсетам.

Оффлайн spiiin

  • Модератор
  • Сообщений: 760
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #13 : 26 Ноябрь 2012, 16:26:04 »
Ti_, это легко делается, в lua можно ставить колбеки на выполнение кода по адресу. расставляешь на все свои оффсеты и в скрипте заводишь счетчик, сколько раз функция вызвалась.
кроме выполнения, можно ставить колбеки на чтение и запись по адресам, я так данные о врагах в играх подменял без модификации кода.

Оффлайн Восьмибитный Лучадор

  • Пользователь
  • Сообщений: 71
  • Пол: Мужской
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #14 : 26 Ноябрь 2012, 16:56:45 »
По-мойму идея очень богатая, но только если развивать её в русле портирования на PC ибо по-другому ее использовать нет смысла, по 2м причинам : во-первых не все эмулируют на винде, во-вторых игрокам это не нужно, это нужно только замороченным людям которые хотят все расковырять в роме, адекватный гамер так сложно запускать игры как вы предлагаете не станет.

Онлайн Mr2

  • Пользователь
  • Сообщений: 1582
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #15 : 26 Ноябрь 2012, 17:29:58 »
во-вторых игрокам это не нужно, это нужно только замороченным людям которые хотят все расковырять в роме, адекватный гамер так сложно запускать игры как вы предлагаете не станет.
Чего сложного в запуске игры? :?
----------------

Востребованность эмулятора завист от качества хаков. :crazy:


Оффлайн Восьмибитный Лучадор

  • Пользователь
  • Сообщений: 71
  • Пол: Мужской
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #16 : 26 Ноябрь 2012, 18:30:56 »
Чего сложного в запуске игры? :?


Что сложного ? Это же очевидно, тут этот момент уже обсуждался. Вместо привычного всеядного эмула и рома процесс запуска усложнится как минимум к скачки нужного скрипта к игре и запуска скрипта, запуска специального зарипанного рома, который должен быть совместим со скриптом, плюс ко всему сам эмулятор будет специфичным, может быть даже чересчур (под каждую игру - свой). В итоге игрок чтобы погамать во-что нибудь"заскриптованное" приобретает головную боль.

Оффлайн spiiin

  • Модератор
  • Сообщений: 760
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #17 : 26 Ноябрь 2012, 18:40:20 »
эмулятора одного достаточно :)  можно свою ветку завести, если это действительно будет интересно большому количеству людей. там и так сейчас отдельные есть - для отладки, для тассинга, для запуска специфичных игр от Санчеза http://www.fceux.com/web/version.html
Добавлено позже:
ну и тогда уже ковырять его в том направление, в котором будет нужно - снятие ограничений на кол-во спрайтов не помешало бы тоже. ну и можно сделать так, что скрипт сам подхватывался из архива с игрой например, тогда обычным игрокам достаточно будет скачать 1 файл архива и запустить его

Оффлайн Восьмибитный Лучадор

  • Пользователь
  • Сообщений: 71
  • Пол: Мужской
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #18 : 26 Ноябрь 2012, 19:00:29 »
spiiin, а кто будет заниматься адаптацией дизассемблированного asm кода на lua ? Единицы.. самое ценное тут - это описание физики игры изложенное на более высокоуровневом языке, тогда мне непонятно для чего нужно держаться за эмулируемую систему, когда можно переходить в плоскость портирования, что дает гораздо больше перспектив и возможностей  :?

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #19 : 26 Ноябрь 2012, 19:12:00 »
spiiin, а кто будет заниматься адаптацией дизассемблированного asm кода на lua ? Единицы.. самое ценное тут - это описание физики игры изложенное на более высокоуровневом языке, тогда мне непонятно для чего нужно держаться за эмулируемую систему, когда можно переходить в плоскость портирования, что дает гораздо больше перспектив и возможностей  :?
Но не дает ощущений оригинала. Когда делают с нуля - получается уже не так, физика неправильная и т.п. 
К тому же придется всё пересоздать не просто.

Оффлайн spiiin

  • Модератор
  • Сообщений: 760
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #20 : 26 Ноябрь 2012, 22:39:31 »
Цитата
Но не дает ощущений оригинала. Когда делают с нуля - получается уже не так, физика неправильная и т.п. 
точно!

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #21 : 26 Ноябрь 2012, 23:28:52 »
r57shell, а можно примеры использования LUA-скриптов в твоем моде Генса? А то возможность видел, а как использовать не знаю. Хочу попробовать применить их при отладке.

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #22 : 27 Ноябрь 2012, 15:04:52 »
Нету примеров, только вон, например то что выше. (для робокопа)
А вообще, частая задача, глянуть список адресов откуда меняется конкретное значение RAM.
Пишешь просто скрипт который запоминает список, и пишет его в текстовый файл.

А вообще, могу на примере Comix Zone например, написать LUA скрипт, который будет сохранять распакованные архивы.
Я в Comix Zone не копался особо, так что я не в курсе, может там нет такого. Но говорят там распаковщик не известный, не изученный :).

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #23 : 27 Ноябрь 2012, 15:25:07 »
r57shell, хотя бы пример вот для этого:
Цитата: r57shell
А вообще, частая задача, глянуть список адресов откуда меняется конкретное значение RAM.

А то даже не знаю, какие ключевые слова, и т.д. по отношению к генсу.

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Скриптинг в эмуляторах.
« Ответ #24 : 27 Ноябрь 2012, 15:59:15 »
Пример кода который пишет с каких мест писалось в $FF0000 во время работы рома.
Возможно не рабочий - не тестил. Параметр 2 - означает размер, то есть диапазон на обработчик $FF0000-$FF0001, то есть запись в word.
local f = io.open ("write.log", "w+");
local hash = {};

memory.registerwrite(0xFF0000, 2, function(address,size)
local a;
a=memory.getregister("pc")-2;
local x=hash[string.format("%06X",a)];
if (x) then
return;
end
f:write(string.format("%06X\n",a));
f:flush();
hash[string.format("%06X",a)]=1;
end)

Вообще есть документация с описанием всех доступных функций, и примерами скриптов. google: gens 11 lua doc