feat: improve RenPy conversion and support MIST runtime
CI / frontend (push) Failing after 15s
CI / backend (push) Failing after 37s

This commit is contained in:
mrleo1nid committed 2026-10-25 23:16:33 +03:00
1 parent f7f7f5b1b3
commit f9eb5c1212
44 files changed
+2822 -174

No files matched your search

+70
View File
@@ -40,6 +40,46 @@ python -m app.import_library "D:\Torrents\Pgames" --check --output report.json
python -m app.import_library "D:\Torrents\Pgames" --import --owner admin --output report.json
```
Для одной игры укажите `--single`: путь должен вести к её папке или архиву.
Проверяются сценарии и совместимость тем же способом, что при импорте:
```powershell
python -m app.import_library "D:\Torrents\Pgames\Renpy\DesertStalker-0.21.4-pc" --single --check --output desert-stalker.json
python -m app.import_library "D:\Games\SomeGame.zip" --single --check --output game.json
```
Для подробного разбора Ren'Py и сохранения извлечённых/декомпилированных
сценариев доступна диагностическая команда (без конвертации медиа):
```powershell
python -m app.converter.analyze --dump ..\data-test\renpy-dump "D:\Torrents\Pgames\Renpy\DesertStalker-0.21.4-pc"
```
Приоритет — общая поддержка синтаксиса и поведения Ren'Py в конвертере и
плеере. Патчи отдельных сборок находятся в `app/games/renpy_builds.py`;
замены блоков дополнительно проверяют SHA-256 исходного текста. Неизвестные
изменения проходят обычную строгую проверку. В DesertStalker 0.21.4 блок
восстановления нативных сохранений заменяется вызовом загрузчика PGames;
сохранения Ren'Py в формате pickle не переносятся.
Начальный код оригинальной игры можно дополнительно проверить в браузерном
интерпретаторе без конвертации медиа. После создания дампа выполните из `backend`:
```powershell
python -m tests.export_renpy_runtime "D:\Torrents\Pgames\Renpy\DesertStalker-0.21.4-pc" "..\data-test\renpy-dump\DesertStalker-0.21.4-pc" "..\data-test\desert-runtime.json"
```
Затем из `frontend`:
```powershell
$env:PGAMES_RENPY_RUNTIME = "D:\Github\pgames-manager\data-test\desert-runtime.json"
node --test tests/renpy-original.test.mjs
```
Это проверка `init`/`default` и сохранности загрузчика PGames; прохождение
сюжета, визуальные эффекты и все ветки она не подтверждает. Оригинальные
сценарии и дампы не включаются в репозиторий.
`--check` не создаёт карточек или версий и не изменяет исходные игры.
`--import` создаёт версии только для прошедших проверку игр. Обработка
коллекции продолжается после отказа отдельной игры. При наличии хотя бы одного
@@ -52,6 +92,36 @@ python -m app.import_library "D:\Torrents\Pgames" --import --owner admin --outpu
Входные каталоги используются только для чтения; временная распаковка и
декомпиляция происходят отдельно.
## MIST 1.0.3 и общая поддержка Ren'Py
Оригинальная сборка MIST 1.0.3 проходит проверку сценариев и полную конвертацию:
3527 изображений, 355 аудиофайлов, 778 видео и 5 шрифтов. Общий плеер поддерживает
циклы `ui.interact()` с результатами `Return` от уже показанных экранов,
`renpy.movie_cutscene` с ожиданием/пропуском, регистрацию изображений через
`renpy.image`/`ImageReference`, пользовательские микшеры и базовую `Gallery`.
У видео `Movie` сохраняются маски прозрачности и режим повтора; красный канал
маски задаёт прозрачность кадра. Эти возможности применяются ко всем играм.
На исходных сценариях MIST проверены начальный код, победа/поражение QTE,
мини-игра поднятия руки и продолжение её цикла после загрузки сохранения.
Тесты `frontend/tests/mist-runtime.test.mjs` включаются переменной
`PGAMES_MIST_RUNTIME`, указывающей на JSON из `tests.export_renpy_runtime`.
`PGAMES_MIST_ORIGINAL` включает backend-проверку оригинального дистрибутива.
Полное прохождение сюжета и визуальная проверка каждой сцены не подтверждены.
В оригинальном `scripts.rpa` есть четыре перехода на отсутствующие метки
(`robinspent`, `breakfastdialog`, `firstdungeontalk`, `afterrscene09`) и показ
отсутствующего `newbuildingcontrolscreen`. Профиль `renpy/mist-1.0.3` распознаёт
сборку дополнительно по SHA-256 сценарного архива и допускает только эти пять
дефектов с исходным количеством вхождений. Они остаются предупреждениями;
при достижении такого места плеер останавливается с явной ошибкой. Замены
сюжетных переходов не подставляются. Изменённые сценарии проверяются заново.
В отчёте также перечислены 22 ссылки на отсутствующие медиа оригинала,
включая старые объявления анимаций, иконку `Roastedfish_Kachel.png` и два
side-изображения. Они не подменяются другими картинками; это ограничение
самого дистрибутива, которое нужно учитывать при проверке конкретных веток.
## Текущая поддержка Naninovel
Добавлен импорт скомпилированных сценариев из Unity-ресурсов Mono-сборок