"""paths.py — единственное место, где инструменты SprPoP знают раскладку каталогов приложения. Все упаковщики берут пути отсюда, поэтому папку SprPoP можно перенести куда угодно: важно лишь, что рядом с tools/ лежат assets/, gen/ и build/. Раскладка: assets/orig/ ОРИГИНАЛЬНЫЕ данные (SDLPoP, MSDOS, записи музыки). В репозиторий не идут — копирайт; откуда их взять, написано в assets/orig/README.md. build/atl// промежуточный выхлоп упаковщиков: отдельные атласы, из которых потом склеиваются архивы. Пересоздаётся, в репозиторий не идёт. assets/packed/ ровно то, что ложится на диск игры, уже в раскладке каталогов диска (BG/, KID/, ...). В репозитории — иначе из чистого клона без assets/orig/ ничего не собрать. gen/ генерируемые C-заголовки. Тоже в репозитории и по той же причине: это такой же производный артефакт, как .arc, и без него не скомпилировать src/. """ from pathlib import Path TOOLS = Path(__file__).resolve().parent APP = TOOLS.parent # --- вход: оригинальные данные ------------------------------------------- ORIG = APP / "assets" / "orig" SDLPOP = ORIG / "SDLPoP" SDLPOP_DATA = SDLPOP / "data" SDLPOP_SRC = SDLPOP / "src" MSDOS = ORIG / "MSDOS" MUSIC_ROOT = ORIG / "PoP1_DOS_music" # Записи DOS-версии лежат в четырёх вариантах. Имена треков во всех наборах # одинаковые, различаются каталог и расширение; ogg_MT-32 — та же музыка в # исполнении Roland MT-32, а не другой кодек. Ключ = имя формата в Makefile. MUSIC_FORMATS = { "flac": ("flac", ".flac"), "mp3": ("mp3", ".mp3"), "ogg": ("ogg", ".ogg"), "mt32": ("ogg_MT-32", ".ogg"), } def music_src(fmt="flac"): """(каталог, расширение) исходников музыки для формата.""" if fmt not in MUSIC_FORMATS: raise SystemExit( "неизвестный формат музыки %r; есть: %s" % (fmt, ", ".join(sorted(MUSIC_FORMATS)))) sub, ext = MUSIC_FORMATS[fmt] return MUSIC_ROOT / sub, ext # --- выход ---------------------------------------------------------------- ATL = APP / "build" / "atl" # промежуточные атласы, по набору в папке PACKED = APP / "assets" / "packed" # раскладка диска игры GEN = APP / "gen" # генерируемые заголовки def atl(name): """Каталог промежуточного выхлопа набора; создаётся при обращении.""" p = ATL / name p.mkdir(parents=True, exist_ok=True) return p def packed(name): """Каталог диска игры (BG, KID, ...); создаётся при обращении.""" p = PACKED / name p.mkdir(parents=True, exist_ok=True) return p