Skip to content

Latest commit

 

History

History
136 lines (112 loc) · 13.7 KB

PROJECT.md

File metadata and controls

136 lines (112 loc) · 13.7 KB

OctopusBridge — описание проекта

1. Что это

OctopusBridge — десктопное приложение для Windows, предназначенное для перевода и модификации компьютерных игр: визуальных новелл, JRPG, текстовых квестов. Оно извлекает тексты игры, переводит их (бесплатные интернет-сервисы), записывает перевод обратно в файлы игры и/или внедряет его в запущенную игру в реальном времени. Дополнительно даёт «чит-инструменты»: редактирование переменных, золота, предметов, карт, сейвов.

Лицензия: GPL-3.0. Проект открытый, ведётся на GitHub (DezFix/OctopusBridge). Языки интерфейса: русский, английский.

2. Поддерживаемые игровые движки

Движок Форматы Статус
RPG Maker MV / MZ JSON-базы данных, карты, события; шифрованные ресурсы (.png_, .ogg_, .rpgmvp и др.); Electron-сборки с app.asar стабильный
Ren'Py (7.x / 8.x) исходники .rpy, скомпилированные .rpyc (legacy и RPC2), архивы .rpa (v1, v2.0, v3.0) стабильный
TyranoScript / TyranoBuilder data/scenario/*.ks, Electron-сборки отложен: код на месте, выключен в реестре (DISABLED_ENGINES)
AjinSyoujyo Electron-сборка TyranoScript (asar + override) отложен: код на месте, выключен в реестре (DISABLED_ENGINES)
Twine (SugarCube) HTML-стори *.html, сейвы .save (LZ-String) экспериментальный (активен: файловый перевод, редактор сейвов, live через мост)
Wolf RPG Editor Data/*.wolf (DXA-v8), Game.dat/*Database.dat/CommonEvent.dat/.mps; внедрение в loose-Data/ отложен: код на месте, выключен в реестре (DISABLED_ENGINES)
Unity Mono/IL2CPP, тексты TextMesh/GUIText (UnityPy) отложен: код на месте, выключен в реестре (DISABLED_ENGINES)

Движок определяется автоматически по структуре папки игры (весовой детектор). Для каждой игры ведётся проект .ob.json (пути, переводы, настройки), проекты хранятся в %APPDATA%\OctopusBridge.

3. Основные возможности

3.1. Перевод

  • Пакетный пайплайн: извлечение → перевод → запись в игру. Обработка пакетами до 100 строк, параллельные воркеры.
  • Движки перевода:
    • Google (каскад из 3 бесплатных эндпоинтов, встроенная защита от rate-limit, переключение на запасные);
    • Bing;
    • MyMemory (с e-mail из настроек);
    • Rotate (автопереключение между доступными).
  • Защита от поломки кода игры: маскирование игровых тегов (\C[8], <center>, {b}, <xN/> и др.) — перевод не трогает макросы, имена переменных и служебные вставки; контроль целостности (сместившиеся/потерянные токены отбрасываются).
  • Глоссарий (общий для всех проектов, с категориями и быстрой вставкой в таблицу перевода).
  • Кэш перевода — единый octopus_cache.json в папке игры; CSV-импорт/экспорт.

3.2. Живая сессия (щупальце)

Подключение к запущенной игре для читов, live-перевода и мониторинга состояния:

  • CDP (Chrome DevTools Protocol) — Chromium-рантаймы: RPG Maker MZ, Tyrano, Twine (WebView2).
  • Frida — Ren'Py: внедрение Python-агента в процесс игры (две ветки: py2 для Ren'Py 7, py3 для Ren'Py 8; офсеты CPython из БД; запуск игры через приложение или подключение к уже запущенной).
  • HTTP-мост — RPG Maker MV (официальный рантайм NW.js без remote-debugging): в игру вшивается плагин octopus_ob.js (HTTP-сервер внутри страницы), все команды идут через него. Сбор ошибок страницы игры (переживает краш через localStorage).
  • Live-перевод: словарь original→translation внедряется в запущенную игру (хуки отрисовки текста) — работает поверх файлового патча и покрывает шифрованные/asar-сборки.

3.3. Чит-панель и инструменты (по движкам)

  • RPG Maker: золото (задать/добавить), отряд (уровень, HP/MP, EXP, состояния, полное исцеление, снятие состояний), предметы (выдать/забрать), переменные и переключатели, телепорт, ноуклип, скорость персонажа, турбо-скорость игры (1–20×), перезагрузка карты, мгновенная победа в бою, скриншот игры.
  • Ren'Py: переменные (просмотр/изменение), триггеры, сейвы (слоты ↔ файлы, плоский список переменных).
  • Twine: редактор сейвов SugarCube (все переменные, включая вложенные структуры).

3.4. Карты и события RPG Maker

  • Рендер карт 1:1 с движком (алгоритм тайлмапа скопирован из rmmz_core.js): автотайлы, верхние слои, столы, тени, регионы; MV и MZ; поддержка шифрованных карт MV (.rpgmvm) — расшифровка при загрузке и обратное шифрование при сохранении.
  • Редактор событий: страницы, картинки, триггеры, приоритеты, маршруты движения (46 команд), условные ветки (13 типов), сообщения, выборы; форматы команд MZ (dict) и MV (list).

3.5. Ресурсы и прочее

  • Браузер ресурсов игры: просмотр/прослушивание/просмотр видео (QMediaPlayer), сохранение файлов; работа внутри app.asar (Electron).
  • Патч шрифта Ren'Py (Noto Sans — кириллица вместо квадратиков), размер шрифта в игре.
  • Патч шрифтов Wolf RPG (TTF в корне игры, после перезапуска).
  • Живое применение шрифта/размера без перезапуска (RPG Maker через CDP/мост, Ren'Py через агента).
  • Трей в системной панели, drag-and-drop проекта, проверка обновлений (GitHub API), тёмная тема.

4. Архитектура

main.py                     — точка входа, экземпляр QApplication
app/
  ui/                       — интерфейс PySide6 (Qt)
    main_window.py            главное окно, вкладки, трей
    translate_tab.py          таблица перевода, пайплайн извлечение/перевод/запись
    map_tab.py                карты RPG Maker + рендер-поток
    event_editor.py           редактор событий RPG Maker
    cheat_tab.py              чит-панель RPG Maker
    renpy_cheat_tab.py        чит-панель Ren'Py (переменные/триггеры)
    save_editor_tab.py        редактор сейвов Twine
    resource_tab.py           браузер ресурсов (аудио/видео/картинки)
    welcome_tab.py / projects_tab.py — старт и список проектов
    i18n.py                   все строки интерфейса (RU/EN)
    updates.py                проверка обновлений
  engines/                  — модули движков (детекция + интеграция в UI)
    base.py                   абстрактный EngineModule
    registry.py               реестр движков, детекция по весу
    rpgmaker/  renpy/  tyrano/  twine/  wolf/
  core/                     — логика, независимая от UI
    renpy/  parser.py (тексты, .rpyc/.rpa), rpa.py (архивы), agent.py (агент для Frida)
    rpgmaker/ parser.py, maprender.py, event-команды, crypto.py (шифрование),
               mv_bridge.py (HTTP-мост MV), asar-чтение
    tyrano/  parser.py (сценарии .ks)
    twine/   parser.py, savefile.py (LZ-String)
    wolf/    dxa.py (DXA-v8: XOR/Huffman/LZ, read-only), parser.py
             (Game/Database/CommonEvent/.mps, loose-apply), fontpatch.py
    translate/ engines.py (Google/Bing/MyMemory/Rotate), glossary.py,
               mask.py, fixers.py, detect.py, alphabets.py, service.py
    tentacles/  DEPRECATED-шим (base.py, cdp_base.py) — только совместимость импортов
    models.py  TranslationEntry, Project
  live/                     — live-слой (работа с запущенной игрой)
    tentacle.py             Tentacle (запуск/останов щупальца), LaunchResult
    session.py              GameSession
    cdp_base.py             CDP-база (общий код CDP-щупалец)
  transport/                — транспорты
    cdp/  client.py (WebSocket CDP), browser.py (поиск портов отладки)
    frida_rpc/  injector.py (внедрение Python-кода в процесс Ren'Py)
    core/assets/fonts/        — NotoSans-Regular.ttf (патч шрифтов)
tests/                      — функциональные тесты (14 файлов)
build_app.py                — сборка .exe (PyInstaller)
setup.iss                   — установщик (Inno Setup)
run_tests.py                — запуск всех тестов

Ключевой интерфейс: EngineModule (детекция → extract() → apply()) и Tentacle (живая сессия: launch()/attach()/detach(), сигналы Qt). Щупальце для RPG Maker MV прозрачно роутит все команды через HTTP-мост вместо CDP.

5. Технологический стек

  • Python 3.13 (Windows 10/11 x64).
  • PySide6 6.11 (Qt6) — GUI, мультимедиа (FFmpeg-бэкенд).
  • requests, websockets (CDP), psutil (процессы), frida (внедрение в Ren'Py), pywebview (Twine).
  • PyInstaller — сборка single-exe; Inno Setup — установщик; GitHub Actions — CI (тесты + сборка на Windows).

6. Сборка и релиз

python build_app.py --tests        # тесты + сборка exe (dist/OctopusBridge_vX.Y.Z.exe)
python build_app.py --installer    # дополнительно установщик Inno Setup
build.bat                          # обёртка для Windows

Версия берётся из app/__init__.py (__version__). Схема нумерации: X.Y, где X — номер обновления (новые фичи), Y — фиксы последнего обновления (например 154.6). Релизы на GitHub: тег X.Y, exe прикладывается к релизу (репозиторий DezFix/OctopusBridge/releases). История изменений — CHANGELOG.md.

7. Тесты и качество

  • python run_tests.py — 14 функциональных тестовых файлов (парсеры движков, шифрование, архивы, агенты, щупальца, UI-логика), без обращения к сети.
  • CI (GitHub Actions, windows-latest): установка зависимостей → тесты → сборка exe.
  • Линт: ruff (в коде поддерживается чистота, E402/F401 в тестах допускаются осознанно).

8. Ограничения и примечания

  • Перевод пакетный (не построчный live): текст извлекается, переводится и записывается до запуска игры; live-хуки работают как дополнение к файловому патчу.
  • Google/Bing — неофициальные бесплатные эндпоинты: без ключей, но возможны лимиты объёма.
  • Инструменты модифицируют игру (файлы и/или память процесса) — использовать на играх, которые пользователь вправе модифицировать.
  • Репозиторий, трекер, релизы: https://github.com/DezFix/OctopusBridge