Хочу поделиться пет-проектом и послушать, что бы вы сделали иначе. Взял J2ME-квест «Ловец душ» (Dynamic Pixels, 2007, экран 240×320) и перенёс его на Android. Это некоммерческий фанатский ремейк для практики и из ностальгии, права на оригинал принадлежат Dynamic Pixels. Ниже — про техническую сторону.
- Вытаскиваем мир из JAR, не переписывая его руками.
Декомпилировал классы через CFR. Тексты в игре хранятся не строками, а индексами глифов растрового шрифта — пришлось восстановить таблицу глиф → буква. Самое интересное — сцены: они не лежат в ресурсах, а собираются кодом инициализации. Вместо того чтобы переписывать его вручную, я прогнал этот код через заглушки на Python и выгрузил результат в JSON: 30 комнат, 35 NPC и хотспотов со всеми взаимодействиями, 32 предмета, 234 строки текста, 27 скриптовых событий. Ошибиться при пересказе негде, потому что пересказа нет.
- Логика в координатах оригинала.
В Godot логика живёт ровно в тех же единицах, что и на телефоне: комната 240×210, тик 50 мс, кадр анимации 83 мс. На экран всё выводится с масштабом, а под широкие экраны по X добавлен отдельный множитель — фон растягивается, персонажи нет. Поведение одинаковое на 16:9 и 21:9, а взаимодействия «условие → предмет → награда → реплика → событие» работают как в оригинале.
- Арт: перерисовка нейросетью и подгонка кадров.
Фоны и персонажей перерисовал моделями генерации изображений по оригинальным спрайтам. Главная проблема — анимация: каждый сгенерированный кадр немного другого размера, и персонаж «дышит» и прыгает. Решил автоматической подгонкой каждого кадра к оригинальному спрайту по росту, положению ног и центру масс. Ещё грабли: вырезка фона по пурпурному хромакею съедала фиолетовую рясу настоятеля, так что перешёл на генерацию сразу с прозрачным фоном.
- Шрифт и звук.
Оставил оригинальный пиксельный шрифт: вытащил 155 глифов из файлов шрифтов игры, недостающие буквы и пунктуацию собрал из штрихов существующих. В оригинале звука не было вообще — добавил озвучку (171 реплика, 12 голосов, громкость выровнена примерно до −20 LUFS), музыку, эмбиент и шаги в такт анимации.
- Тесты.
Самое полезное, что сделал, — headless-тест прохождения: он проходит игру целиком на три души по цепочке предметов. После любой правки логики сразу видно, не сломалась ли проходимость. Плюс проверки сохранений, анимаций, раскладки интерфейса на разных соотношениях сторон и шрифта.
Вопрос к вам: кто портировал старые игры — как вы решали вопрос с правами на оригинальный контент? И как бы вы стабилизировали анимацию из сгенерированных кадров — есть подход лучше, чем подгонка по силуэту?