Мой интерес к данной теме вырос из этого видео:
Привычная мне игра выглядела в таком виде весьма необычно, и мне стало интересно, каким образом автор этого видео сделал это. Тогда я нашёл на его канале следующий видео-отчёт.
Нет-нет, вы не ошиблись: видео действительно полностью создано вручную, кадр за кадром его автор позиционировал маленькую картинку в нужное место большой. Безусловно, это мазохизм, но мазохизм этот вызывает уважение и восхищение железным терпением автора.
И тогда я задумался: а есть ли смысл во всей этой работе? Ведь в процессе игры сама игрушка всегда «знает» координаты видимого участка карты. А тасерский эмулятор позволяет с лёгкостью получить доступ к любой ячейке памяти и написать скрипт, выполняющий те или иные рутинные действия. Гениально! Достаточно просто делать скриншот каждого кадра игрового процесса, считывать из памяти координаты «камеры», затем, обзаведясь картой уровня, вырезать из неё нужные фрагменты, вставить в них наши скриншоты, и скомпоновать из них готовое видео!
Для работы с изображениями я выбрал lua-gd, так как с библиотекой gd уже достаточно хорошо знаком (работал с ней из PHP и C). К сожалению, моя первая попытка установки lua-gd в среду эмулятора не увенчалась успехом: периодически случались досадные падения.
На помощь пришёл друг-тасер AnS (кстати, наш соотечественник). Он обнаружил, что крах происходит только с последними версиями Gens, в то время как одна из более старых версий работает надёжно. Поэтому в качестве workaround было принято решение просто заменить Gens.
Дело сдвинулось с мёртвой точки — был написан первый код на Lua, найдены карты уровней. К сожалению, не для всех уровней классических игр Sonic существуют нормальные карты, а средства создания карт есть только у экспертов-ромхакеров. Исключение составляет лишь игра Sonic 3 and Knuckles, для которой есть программа Sonic Extractor, позволяющая с лёгкостью создавать карты самостоятельно, а также определять, какие объекты будут на этих картах отображаться, а какие — нет. Также отдельную благодарность заслуживает опытный TAS-ер и ромхакер marzojr, подсказавший, каким образом можно «спрятать» информационный блок, содержащий время, число собранных колец и тому подобную информацию.
В качестве заключения — видео, созданное с использованием указанного способа, а также оригинал этого прохождения.
Оригинал
Atlas encode
Ссылки
ссылка на оригинал статьи http://habrahabr.ru/post/200822/
Добавить комментарий