Разработка и ромхакинг > Ромхакинг и программирование
Скриптинг в эмуляторах.
(1/2) > >>
spiiin:
Давно в голове крутилась такая идея - взять эмулятор одной из старых консолей с поддержкой скриптов, добавить в его систему парсинга команд специальный опкод, по которому будет срабатывать передача управления в скрипт. Дальше вместо стандартного процесса хака делать следующее - дизассемблированную функцию переписать на скриптовом языке и стереть её из ROM, заменив тело на опкод вызова скриптовой функции (для этого хватит пары байт), оставшееся место использовать для своих нужд. Из скрипта есть доступ к любым функциям эмулятора (а если и нет, можно прокинуть нехватающие).
Так можно переписать все основные системы игры - управление, интеллект врагов, форматы описания уровней, тексты etc. Всё необходимое для модификации. На выходе получится практически чистый ROM с частью технических неинтересных для модификации функций в нём, и движок игры в читабельном виде на языке высокого уровня.
Сложность переписывания кода на скриптовом языке намного меньше, чем переписывания алгоритма на ассемблере.
Но главные плюсы в том, что снимаются ограничения на размеры данных и кода, которых всегда не хватает, а также в том, что можно удобно тестировать переписанный код, модифицируя его без перезапуска игры и работать над скриптом совместно.
Так еще никто не делал :)

Для теста переписал небольшую часть логики прыжков Черного Плаща под новую версию эмулятора. Изменённый эмулятор, скрипт и ром в приложении. Если кто-то заинтересуется таким подходом к хакингу, буду рад объяснить подробнее :)
dekster88:
из всего прочитанного понял только фразу "Черного Плаща" o_0
Lomax:
dekster88, а я только "буду рад". А кто такой Черный плащ? :lol:
Добавлено позже:
spiiin, а это какой язык программирования? Можно на него где нибудь инструкции посмотреть и синтаксис?) Я бы после котов поразбирался бы, посидел)
Ti_:
Идея отличная, но скриптами тоже надо уметь писать.

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

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

--- Цитата: spiiin от 26 Ноябрь 2012, 02:54:15 ---Так еще никто не делал :)

--- Конец цитаты ---
Идея не нова... почему не делал конкретно я. С точки зрения железа это бессмысленно.
Даже с точки зрения эмуляторов - привязка к одному эмулятору.

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

Отлаживать скриптами очень удобно.
spiiin:
r57shell
на железе сейчас играют единицы, в массе все с компьютеров или смартфонов.
идея в том, чтобы подменять всю логику игры с ассемблера на скрипт. в основном чтобы делать новые уровни для игр, раньше скрипты только для вспомогательных задач использовали, типа тех что ты написал.
r57shell:
мне до лампочки до тех, кто играет на эмуляторах.
к тому, же как я уже говорил, такой скриптинг - только под конкретный эмулятор, это раз.
второе, даже возможно под конкретную сборку. это возможно не редкость, что в PC версии есть луа скрипты, а под телефон или ещё что - нету.
Mr2:

--- Цитата: spiiin от 26 Ноябрь 2012, 13:12:03 ---r57shell
на железе сейчас играют единицы, в массе все с компьютеров или смартфонов.
--- Конец цитаты ---
Согласен. Не знаю как обстоят дела с копированием игр на картридж, но думаю что хуже чем с копированием на болванку. :D

--- Цитата: spiiin от 26 Ноябрь 2012, 13:12:03 ---идея в том, чтобы подменять всю логику игры с ассемблера на скрипт. в основном чтобы делать новые уровни для игр, раньше скрипты только для вспомогательных задач использовали, типа тех что ты написал.

--- Конец цитаты ---
Была похожая идея(Ответ #339).
Ti_:

--- Цитата: spiiin от 26 Ноябрь 2012, 13:02:04 ---Но думаю можно без проблем попросить добавить мои изменения в официальную сборку FceUltra, особенно если будет несколько игр хотя бы, которые используют такую фишку.

--- Конец цитаты ---
Хах, попросить сменить БедОпкод на фишку для поддержки игр, причем даже не игр, а хаков! Не будет этого точно в оф.сборках, эмулятор ориентированы на точность потому что и эмуляцию оригинальных игр, а не хаков.
Они даже опцию 'разгона' добавлять не хотят, а ты предлагаешь заменить опкод который типо 'эмулируется'.

Но раз так делать хакнутый эмуль, раз он всё равно несовместим ни с чем будет, можно и оперативку расширить и спрайты если возможно. (мерцание не дает нормально делать уровни)
r57shell:
для сеги можно не менять эмулятор gens_11b, достаточно поставить callback по адресу, а там вообще может стоять один только rts.
lupus:
Да, идея не нова, но весьма интересна, я когда-то прикручивал чужой скрипт к первому метроиду, что позволяло пользоваться картой и прочими прелестями, без которых игру пройти очень и очень сложно.
Про явные минусы уже писали - привязка к конкретному эмулятору под конкретную платформу, а я на пк не играю вообще :/
Ti_:

--- Цитата: r57shell от 26 Ноябрь 2012, 15:17:56 ---для сеги можно не менять эмулятор gens_11b, достаточно поставить callback по адресу, а там вообще может стоять один только rts.

--- Конец цитаты ---
Хитро.
А у меня появился вопрос по скриптам, допустим я создам список оффсетов рома в скрипте, и мне нужно чтобы подсчитывало, сколько раз запускался код по этим оффсетам.
spiiin:
Ti_, это легко делается, в lua можно ставить колбеки на выполнение кода по адресу. расставляешь на все свои оффсеты и в скрипте заводишь счетчик, сколько раз функция вызвалась.
кроме выполнения, можно ставить колбеки на чтение и запись по адресам, я так данные о врагах в играх подменял без модификации кода.
Восьмибитный Лучадор:
По-мойму идея очень богатая, но только если развивать её в русле портирования на PC ибо по-другому ее использовать нет смысла, по 2м причинам : во-первых не все эмулируют на винде, во-вторых игрокам это не нужно, это нужно только замороченным людям которые хотят все расковырять в роме, адекватный гамер так сложно запускать игры как вы предлагаете не станет.
Mr2:

--- Цитата: Восьмибитный Лучадор от 26 Ноябрь 2012, 16:56:45 ---во-вторых игрокам это не нужно, это нужно только замороченным людям которые хотят все расковырять в роме, адекватный гамер так сложно запускать игры как вы предлагаете не станет.

--- Конец цитаты ---
Чего сложного в запуске игры? :?
----------------

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

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

--- Цитата: Mr2 от 26 Ноябрь 2012, 17:29:58 ---Чего сложного в запуске игры? :?


--- Конец цитаты ---

Что сложного ? Это же очевидно, тут этот момент уже обсуждался. Вместо привычного всеядного эмула и рома процесс запуска усложнится как минимум к скачки нужного скрипта к игре и запуска скрипта, запуска специального зарипанного рома, который должен быть совместим со скриптом, плюс ко всему сам эмулятор будет специфичным, может быть даже чересчур (под каждую игру - свой). В итоге игрок чтобы погамать во-что нибудь"заскриптованное" приобретает головную боль.
spiiin:
эмулятора одного достаточно :)  можно свою ветку завести, если это действительно будет интересно большому количеству людей. там и так сейчас отдельные есть - для отладки, для тассинга, для запуска специфичных игр от Санчеза http://www.fceux.com/web/version.html
Добавлено позже:
ну и тогда уже ковырять его в том направление, в котором будет нужно - снятие ограничений на кол-во спрайтов не помешало бы тоже. ну и можно сделать так, что скрипт сам подхватывался из архива с игрой например, тогда обычным игрокам достаточно будет скачать 1 файл архива и запустить его
Восьмибитный Лучадор:
spiiin, а кто будет заниматься адаптацией дизассемблированного asm кода на lua ? Единицы.. самое ценное тут - это описание физики игры изложенное на более высокоуровневом языке, тогда мне непонятно для чего нужно держаться за эмулируемую систему, когда можно переходить в плоскость портирования, что дает гораздо больше перспектив и возможностей  :?
Ti_:

--- Цитата: Восьмибитный Лучадор от 26 Ноябрь 2012, 19:00:29 ---spiiin, а кто будет заниматься адаптацией дизассемблированного asm кода на lua ? Единицы.. самое ценное тут - это описание физики игры изложенное на более высокоуровневом языке, тогда мне непонятно для чего нужно держаться за эмулируемую систему, когда можно переходить в плоскость портирования, что дает гораздо больше перспектив и возможностей  :?

--- Конец цитаты ---
Но не дает ощущений оригинала. Когда делают с нуля - получается уже не так, физика неправильная и т.п. 
К тому же придется всё пересоздать не просто.
Навигация
Главная страница сообщений
Следующая страница

Перейти к полной версии