- Fluent 85.8%
- Python 6.9%
- C# 6.7%
- Shell 0.5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| 00_AavikkoOverlay | ||
| 99_OverlaySystem@d010d77090 | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| README.md | ||
| x00_StartHere.py | ||
| x01_GetBuild.py | ||
| x02_ForAavikkoDevelopers.py | ||
Aavikko Avaruus - overlay для Space Station 14 (база: ADT)
Это репозиторий-оверлей модификаций проекта Aavikko Avaruus поверх базовой сборки Space Station ADT. Полного дерева исходников здесь нет и не будет - база скачивается по закреплённому пину, а здесь живут только наши изменения: моды, патчи, удаления и базы данных инструментов.
Такой формат = источник соответствующих исходников (AGPL §13): база публична на GitHub, изменения - здесь, применяются стандартными средствами git.
Автор системы оверлея - Valikzant (Aavikko Avaruus).
Быстрый старт
git clone https://git.aavikko.space/aavikko/aavikko-avaruus-overlay
cd aavikko-avaruus-overlay
# Скачать базу по пину (ADT + RobustToolbox появятся в 01_Build)
python x00_StartHere.py
RUN_THIS.pyиз базовой сборки запускать не нужно - движок RobustToolbox уже инициализированx00_StartHere.py.
Какая именно база скачивается? Та, что закреплена пином в
00_AavikkoOverlay/99_Database/08_UpstreamPinner/00_UpstreamPin.yml
(файл вида: base / url / commit / pinned_at). Пин - единственный источник;
если ADT уйдёт вперёд, здесь появится новый пин + обновлённые патчи, и сборка
останется воспроизводимой.
Применение оверлея (4 шага, вручную)
После x00_StartHere.py база лежит в 01_Build. Дальше - применить оверлей
руками. Все пути ниже - относительно корня клона.
Шаг 1 - Mods (наши новые файлы). Копируются в дерево базовой сборки:
| Откуда (в этом репо) | Куда (в 01_Build) |
|---|---|
00_AavikkoOverlay/00_Resources/Mods/... |
Resources/... |
00_AavikkoOverlay/01_Content/Mods/... |
... (корень, напр. Content.Server/...) |
00_AavikkoOverlay/02_RobustToolbox/Mods/... |
RobustToolbox/... |
Windows (PowerShell, из корня клона):
robocopy 00_AavikkoOverlay\00_Resources\Mods 01_Build\Resources /E
robocopy 00_AavikkoOverlay\01_Content\Mods 01_Build /E
robocopy 00_AavikkoOverlay\02_RobustToolbox\Mods 01_Build\RobustToolbox /E # если папка есть
Linux/macOS:
cp -a 00_AavikkoOverlay/00_Resources/Mods/. 01_Build/Resources/
cp -a 00_AavikkoOverlay/01_Content/Mods/. 01_Build/
cp -a 00_AavikkoOverlay/02_RobustToolbox/Mods/. 01_Build/RobustToolbox/ 2>/dev/null || true
Шаг 2 - бинарные патчи (PNG). Текстовые правки - это .patch-файлы
(шаг 3), но бинарники git-патчем не выражаются: для них Patches хранит
полные копии. .patch-файлы лежат в тех же папках, поэтому копируем всё,
кроме *.patch (шагу 3 они нужны в оверлее, а не в дереве сборки).
Копии ложатся поверх тех же относительных путей:
| Откуда | Куда |
|---|---|
00_AavikkoOverlay/00_Resources/Patches/<rel> |
Resources/<rel> |
00_AavikkoOverlay/01_Content/Patches/<rel> |
<rel> |
00_AavikkoOverlay/02_RobustToolbox/Patches/<rel> |
RobustToolbox/<rel> |
Windows (PowerShell, из корня клона):
robocopy 00_AavikkoOverlay\00_Resources\Patches 01_Build\Resources /E /XF *.patch
robocopy 00_AavikkoOverlay\01_Content\Patches 01_Build /E /XF *.patch
robocopy 00_AavikkoOverlay\02_RobustToolbox\Patches 01_Build\RobustToolbox /E /XF *.patch # если папка есть
Linux/macOS:
python3 - <<'EOF'
import shutil, pathlib
for src, dst in (
("00_AavikkoOverlay/00_Resources/Patches", "01_Build/Resources"),
("00_AavikkoOverlay/01_Content/Patches", "01_Build"),
("00_AavikkoOverlay/02_RobustToolbox/Patches", "01_Build/RobustToolbox"),
):
src, dst = pathlib.Path(src), pathlib.Path(dst)
if not src.is_dir():
continue
n = 0
for f in src.rglob("*"):
# пропускаем текстовые .patch (шаг 3), симлинки и временные снапшоты
if (f.suffix == ".patch" or f.is_symlink() or not f.is_file()
or f.name.endswith((".old.patched", ".conflict.patched",
".conflict.upstream", ".broken"))):
continue
rel = f.relative_to(src)
(dst / rel).parent.mkdir(parents=True, exist_ok=True)
shutil.copy2(f, dst / rel)
n += 1
print(f"copied {n} file(s) from {src}")
EOF
Шаг 3 - .patch (текстовые правки). Применить git-патчи (пути в патчах уже корректны для корня базовой сборки):
cd 01_Build
find ../00_AavikkoOverlay -name '*.patch' -print0 | xargs -0 git apply --whitespace=nowarn
Windows PowerShell:
Get-ChildItem ..\00_AavikkoOverlay\*\Patches -Recurse -Filter *.patch | ForEach-Object { git apply --whitespace=nowarn $_.FullName }
Шаг 4 - удаления (лицензионная гигиена и другие лишние файлы). Часть файлов базовой сборки
должна быть удалена из дерева. Список путей - в
00_AavikkoOverlay/99_Database/06_Sanitizer/00_History.json (ключ deleted; папка перенумерована 14.09 — ранее 00_Sanitizer/):
Linux/macOS (из корня клона):
python3 - <<'EOF'
import json, os
db = json.load(open('00_AavikkoOverlay/99_Database/06_Sanitizer/00_History.json'))
n = 0
for r in db['deleted']:
p = os.path.join('01_Build', r['path'])
if os.path.isfile(p):
os.remove(p); n += 1
print(f'removed {n} file(s)')
EOF
Windows PowerShell:
python -c "import json,os; db=json.load(open('00_AavikkoOverlay/99_Database/06_Sanitizer/00_History.json'))['deleted']; [os.remove(os.path.join('01_Build', r['path'])) for r in db if os.path.isfile(os.path.join('01_Build', r['path']))]; print('done')"
После четырёх шагов в 01_Build - полное дерево Aavikko Avaruus: база + наши
файлы + наши правки + гигиена. Дальше - сборка.
Сборка и запуск сервера
cd 01_Build
dotnet restore
dotnet build --no-restore -c Release # или Debug
Запуск:
dotnet run --project Content.Server --no-build # Сервер
dotnet run --project Content.Client --no-build --connect # Клиент с автоматическим подключением
Лончеры (из корня клона, пути уже указывают в 01_Build):
| Файл | Что делает |
|---|---|
00_AavikkoOverlay/run-server-nobuild.bat |
только сервер |
00_AavikkoOverlay/run-client-nobuild.bat |
только клиент |
00_AavikkoOverlay/run-server-client-nobuild.bat |
сервер + клиент |
00_AavikkoOverlay/run-*-showcasemap-nobuild.bat |
варианты с витринной картой |
Требования: .NET SDK 7+, Python 3.8+, Git.
Обновление базы (для всех)
Мы обновляем пин 00_UpstreamPin.yml обычными коммитами вместе с
перегенерацией патчей под новую базу. Чтобы получить нашу актуальную сборку -
просто git pull в этом репо и заново python x00_StartHere.py (скрипт
скачает уже новый пин) + шаги 1-4 на свежем дереве. История переписывается
только вперёд (обычные коммиты), force-push не используется.
Инструменты и участие в разработке
Поверх этой системы работает собственный набор инструментов Valikzant'а
(сабмодуль 99_OverlaySystem): автоматическое применение и генерация
оверлея, проверки целостности, VSCode-расширение с панелью статуса. Ручные
шаги из README они заменяют одной командой. Инструменты предоставляются
разработчикам проекта - если хотите присоединиться к разработке Aavikko
Avaruus и получить доступ, напишите Valikzant'у! :D
python x02_ForAavikkoDevelopers.py # подтянет 99_OverlaySystem (нужен доступ)
python 99_OverlaySystem/00_Patcher/x00_Apply.py # оверлей применяется автоматически
Структура репозитория
x00_StartHere.py вход: окружение + скачивание базы по пину
x01_GetBuild.py скачивание базовой сборки по пину (вызывается StartHere)
x02_ForAavikkoDevelopers.py (приватно) сеттап инструментов разработки
README.md этот файл
00_AavikkoOverlay/ НАШ контент (бывш. 00_Aavikko)
00_Resources/ Mods/ Patches/
01_Content/ Mods/ Patches/
02_RobustToolbox/ Mods/ Patches/ (пока пусто)
99_Database/ папки пронумерованы по номерам инструментов (14.09):
00_Patcher/{00_PatchBases,01_ConflictDecisions}.yml + 02_Converged.json,
02_ResourceConfirmer/, 06_Sanitizer/00_History.json (+99_Backups, +01_Runtime.json - local, gitignored),
07_LicenseExplorer/ (кеш-файлы, gitignored), 08_UpstreamPinner/00_UpstreamPin.yml <- пин базовой сборки
run-*.bat лончеры (пути - в 01_Build)
01_Build/ СКАЧИВАЕТСЯ целиком (git-ignored)
99_OverlaySystem/ сабмодуль инструментов команды (по запросу)
Лицензии и атрибуция
- Лицензия этого оверлея: код - AGPL-3.0-or-later, ассеты - CC-BY-SA 3.0 (совместимо с базой и движком; см. LICENSE-файлы базовой сборки в 01_Build).
- Базовая сборка: AdventureTimeSS14/space_station_ADT (MIT + AGPL-компоненты; RobustToolbox - MIT). Их лицензии и заголовки SPDX в патчах сохраняются.