Skip to content
ddepsaddPublic

About

barotrauma-save-editor

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

bse — Barotrauma save editor

Lossless-редактор save-файлов кампании Barotrauma. Просмотр и правка любого поля сейва с гарантией байтовой совместимости: всё, что ты не менял, остаётся байт-в-байт как в оригинале.

Кроссплатформенный: работает как веб-приложение (любой современный браузер, файл не покидает машину) и как нативное десктоп-приложение на Tauri (Linux / Windows / macOS) с сохранением поверх исходного файла и автоматическим .bak.

Главный инвариант

Парсер хранит каждый узел вместе с его исходным текстом; сериализатор выводит нетронутые узлы verbatim. Если ничего не изменено — на выходе исходный файл байт-в-байт. Это проверяется self-тестом при каждой загрузке (контейнер, XML и UTF-8 на уровне байтов) до любых правок; при расхождении редактор отказывается работать с файлом.

Возможности

  • Вкладки: Настройки (сложность/множители с подсказками эффектов), Экономика (кошелёк, магазины, сток), Экипаж (скиллы/опыт/таланты/афликции ботов), Карта (радиация, локации, массовый ретроактивный пересчёт запечённой сложности уровней), Инспектор (дерево всего документа, поиск, правка любого атрибута), XML (сырой текст с применением через lossless-проверку), Дифф (было→стало), Проверки (диапазоны, enum'ы, danger-поля).
  • Дифф считается структурным сравнением с оригиналом, а не флагами — переживает правку через сырой XML.
  • Защита от битых и вредоносных файлов: кап на gzip-бомбы, отказ на не-UTF-8, безопасный декодер entity.

Сборка и запуск

Требования: Node.js ≥ 20. Для десктопной сборки дополнительно Rust ≥ 1.77.2 и системные зависимости Tauri v2 (https://v2.tauri.app/start/prerequisites/).

Rust через rustup: после установки шимов обязательно выбрать тулчейн — rustup default stable (без этого cargo выдаст «no default is configured»). На Linux нужен webkit2gtk-4.1: проверка pkg-config --modversion webkit2gtk-4.1; Debian/Ubuntu: libwebkit2gtk-4.1-dev, Gentoo: net-libs/webkit-gtk (слот 4.1), Arch: webkit2gtk-4.1.

Веб-версия

npm install
npm run dev -w @bse/ui        # dev-сервер на http://localhost:5173
npm run build -w @bse/ui      # сборка

Результат сборки — один самодостаточный файл packages/ui/dist/index.html (всё инлайнится). Открывается двойным кликом прямо с диска, никакой сервер не нужен; файл можно просто переслать другому человеку. Альтернативно: npm run preview -w @bse/ui поднимет его на localhost.

В браузере открытие через диалог/drag-drop, сохранение — скачиванием файла.

Десктоп (Tauri)

npm install
npm run dev -w @bse/desktop        # дев-режим с hot reload
npm run build:bin -w @bse/desktop  # только бинарь: src-tauri/target/release/bse
npm run build -w @bse/desktop      # бинарь + пакеты (deb/rpm; msi/dmg на своих ОС)

В десктопной версии «Открыть файл…» помнит путь, «Сохранить (.bak)» пишет поверх исходника (сначала копия имя.save.bak, затем атомарная запись через tmp+rename), «Сохранить как…» — в новый путь. IPC-поверхность Rust-стороны — ровно две команды: read_save и write_save_with_backup; никакого доступа к ФС из webview сверх этого, CSP включён.

Тесты

cd packages/core
npx tsx test/roundtrip.test.ts       # identity контейнера/XML, хирургия мутаций
npx tsx test/model.test.ts           # schema, metadata KV, diff, validate
npx tsx test/property.test.ts        # случайные правки с гадкими значениями
npx tsx test/compare.test.ts         # tree-diff, raw-rebase, bulk rescale
npx tsx test/browser-codec.test.ts   # браузерный gzip-путь
npx tsx test/escape.test.ts          # entity-декодер: prototype leak, кодпоинты
npx tsx test/hardening.test.ts       # gzip-бомба, не-UTF-8
npx tsc --noEmit

Без аргумента тесты генерируют синтетическую фикстуру; чтобы прогнать против реального сейва — передай путь: npx tsx test/roundtrip.test.ts /path/to.save.

CI и релизы

  • .github/workflows/ci.yml — на каждый push/PR: typecheck обоих пакетов, все 7 тест-сюит на синтетической фикстуре, сборка веб-версии.
  • .github/workflows/release.yml — на тег v* (или вручную): tauri-action собирает пакеты под Linux (deb/rpm + голый бинарь в tar.xz), Windows (msi/exe) и macOS (dmg, отдельно aarch64 и x86_64) и складывает их в draft-релиз GitHub.

Выпуск версии:

git tag v0.1.0 && git push origin v0.1.0

После завершения workflow — опубликовать draft-релиз в разделе Releases.

Формат сейва

.save = gzip поверх контейнера [int32 nameLen][UTF-16LE name][int32 dataLen][bytes]… до EOF. gamesession.xml лежит в контейнере без сжатия (UTF-8 + BOM, CRLF), .sub-файлы — отдельные gzip, редактором пробрасываются verbatim.

Лицензия

MIT — см. LICENSE.


bse — Barotrauma save editor. Lossless campaign-save editing: every byte you didn't touch stays identical. Web app + Tauri desktop (Linux/Windows/macOS). Build web: npm install && npm run build -w @bse/ui. Build desktop: npm run build -w @bse/desktop (needs Rust ≥ 1.77.2 and Tauri v2 prerequisites). Tests: see packages/core/test/. MIT licensed.

About

barotrauma-save-editor

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages