17.04.2017
Встала тут передо мной задача стянуть картинки из «Бесконечного лета». Собственно, распространяются они по Creative Commons, всё легально и скрипт для распаковки архивов выложен в свободный доступ одним из разработчиков игры. Но надо помнить, что спрайты в этой игре многослойные: на голое "обезличенное" тело накладывается различная одежда и эмоции. Конечно, можно всё это собрать вручную, но зачем, если можно вытащить уже собранные спрайты из самой игры?
«Бесконечное лето» построено на движке Ren'Py, основанного на библиотеке pygame языка Python. Движок "опенсорсный" и его код можно спокойно скачать и посмотреть, что нехило помогает в понимании внутреннего устройства игр, сделанных на нём. Благодаря этому и исследованию некоторых частей кода самой игры мне-таки удалось написать скрипт, который выполняет поставленную задачу!
Ren'Py, как движок, интересен тем, что он компилирует и выполняет любые файлы с кодом, которые находит в папке с игрой. На этом основано как создание модификаций для игр на нём, так и вышеуказанные скрипты Лолбота для распаковки ресурсов и декомпиляции кода игр. Так что Вам следует извлечь *.rpy-скрипт из архива в папку game внутри директории с игрой. Дальнейшие действия зависят от конкретной игры. Из коробки поддерживается, собственно, только БЛ:
- Запустите игру и зайдите в меню выбора модов.
- Выберите мод с названием Image Puller
- Дальше, следуя инструкциям, выберите персонажей, для которых хотите извлечь спрайты.
- Ждите.
- Когда игра перестанет тормозить, а в папке Pulled images больше не будут появляться новые файлы, можно выйти из мода через меню.
С другими играми немного сложнее. Потребуется редактировать код. Впрочем сразу обнадёжу, что если повезёт, то всё обойдётся малой кровью! Класс koz_ImagePuller
, содержащий в себе всю основную логику скрипта по извлечению файлов, более-менее универсален, так что на Ваши плечи ложится лишь ответственность за его запуск в нужном месте.
Итак, сперва попробуйте просто пролистать код скрипта до конца блока инициализации, где кончается описание класса, перед описаниями меток (label). Среди комментариев будет такая строка:
# $ koz_ImagePuller().pull_async(delay=10)
Раскомментируйте её, убрав знак решётки и пробел после него ("#
"). Попробуйте запустить игру и подождать 10 секунд (можете попробовать уменьшить или увеличить это значение). Если игра не вылетит и начнётся распаковка, то Вам повезло! Ждите окончания тормозов и появления файлов в вышеназванной папке.
Если же ресурсы инициализируются как-то более хитро, то Вам может понадобиться декомпилировать код игры или ещё каким-либо методом запускать распаковку в другой момент выполнения кода, как я это делаю для БЛ. Это уже более сложная операция, так что я не буду её расписывать здесь: желающие могут ознакомиться с хорошо откомментированным содержимым скрипта и моим примером с «Бесконечным летом».
Обновление от 19.05.2017 (v1.1.0)
Добавлено:
- прогресс-бар;
- обрезание прозрачного фона у спрайтов;
- сортировка изображений по папкам;
- больше возможностей для фильтрации извлекаемых изображений;
- логирование и игнорирование различных ошибок (возникающие, например, при попытке извлечь несуществующее изображение);
- возможность штатно прервать извлечение.
Также менюшки выбора параметров теперь не сохраняют выборы между запусками. Ну и, само собой, были исправлены некоторые ошибки (впрочем, некоторые ещё остались — см. здесь).
Скачать старую версию: v1.0.0.
С Днём пионерии!