В репозитории нет ни байта чужих данных, но есть знание, откуда их взять: tools/fetch_orig.py качает SDLPoP (ресурсы + исходники-эталон) и записи саундтрека, причём адрес архива музыки читает из самого SDLPoP (ReadMe.amigaos4, секция «AUDIO IS SLOW/AWFULL»); запасной адрес вшит константой. Цели: make fetch / fetch-sdlpop / fetch-music / fetch-check / fetch-list. Версия SDLPoP пишется в .fetch.json вместе с манифестом sha256 всего дерева. По нему следующий fetch отличает НАШИ отладочные врезки (POP_TRACE — покадровая трасса Кида, дампы палитры и спрайтов) от нетронутых файлов и не сносит их молча: без --force каталог не трогается вовсе, с --force старая копия уезжает в бэкап .cache/. MSDOS/ не качается и НЕ НУЖЕН: уровни и оцифровка берутся из SDLPoP. У SprPoP теперь свой .gitignore, написанный так, чтобы стать корневым при выделении в отдельный репозиторий (пути от корня приложения, ничего про applications/). Из корневого .gitignore тулчейна SprPoP-секция убрана, чтобы две копии не разъезжались. Заодно закрылась дыра: шаблон applications/*/*/*.exe не покрывал артефакты в корне SprPoP. assets/orig/README.md выведен из-под игнора — без него в чистом клоне не написано, откуда брать данные, а это и есть смысл затеи. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011MsUsEFAQfsjjQpJ7RtKVY
assets/orig — оригинальные данные
Здесь лежат исходные данные Prince of Persia, из которых make resources
делает ресурсы Sprinter-версии. В репозиторий этот каталог не идёт —
материал копирайтный (см. .gitignore). Вместо данных в репозитории лежит
знание, откуда они берутся: tools/fetch_orig.py и таблица источников
внутри него.
Как заполнить
make fetch # SDLPoP + записи саундтрека (всё, что качается)
make fetch-check # что уже на месте
make fetch-list # таблица источников с адресами
Тонкости:
make fetch-sdlpop только SDLPoP
make fetch-music только музыка (43 МБ)
make FETCH_ARGS=--force fetch перекачать заново
make FETCH_ARGS="--ref v1.23" fetch-sdlpop конкретный тег SDLPoP
Скачанные архивы кэшируются в assets/orig/.cache/ — повторный make fetch
сеть не трогает. Версия SDLPoP записывается в assets/orig/SDLPoP/.fetch.json
(ветка/тег, sha, дата), и следующий make fetch по ней понимает, последняя
у нас версия или нет.
Собрать игру без assets/orig/ можно: упакованные ресурсы лежат в
../packed/, а генерируемые заголовки — в ../../gen/. assets/orig нужен
только чтобы ресурсы перегенерировать.
Исключение — LEVELS: файлы res20xx.bin ложатся на диск игры как есть, без
конвертации, поэтому assets/packed/LEVELS/ тоже вне репозитория и заполняется
из orig командой make resources-levels.
Что и откуда
| Каталог | Что это | Где взять |
|---|---|---|
SDLPoP/data/ |
Распакованные ресурсы DOS-версии: PNG-спрайты (VDUNGEON, VPALACE, KID, GUARD, SKEL, VIZIER, SHADOW, TITLE, PV, PRINCE), палитры, LEVELS/res20xx.bin, оцифровка DIGISND*.DAT |
make fetch-sdlpop — https://github.com/NagyD/SDLPoP (GPLv3) |
SDLPoP/src/ |
Исходники SDLPoP. Нужны не только упаковщикам (menu.c и seg009.c содержат встроенные шрифты, из seg005/seg006 берутся таблицы кадров и seqtbl), но и как эталон механики: расхождение в поведении всегда сверяется с ними |
тем же make fetch-sdlpop |
PoP1_DOS_music/ |
Записи музыки DOS-версии в четырёх наборах: flac/ (по умолчанию), mp3/, ogg/, ogg_MT-32/ (исполнение Roland MT-32). Имена треков во всех наборах одинаковые; какой брать — задаёт MUSIC_FMT |
make fetch-music. Адрес архива скрипт читает из самого SDLPoP (ReadMe.amigaos4, секция «AUDIO IS SLOW/AWFULL»), запасной — popot.org |
MSDOS/ |
Необязательно. Оригинальная поставка PoP 1.0 для MS-DOS. Используется только digisnd*.dat со звуком, и только если попросить: make SND_SRC=msdos |
Не качается — дистрибутив игры, положить руками |
MSDOS: зачем он и почему без него живётся
По умолчанию всё берётся из SDLPoP — и уровни, и оцифровка звука. Так
сборка работает на чистой машине сразу после make fetch.
MSDOS/ даёт ровно одно: более полный набор оцифрованных эффектов. Из 31
звука 28 совпадают побайтно, а три — нет, и все три лучше в дистрибутиве:
spiked (48, насаживание на пики) в наборе SDLPoP длиной 7 сэмплов, то есть
его нет; sword_vs_sword (10) короче; sword_moving (11) — другая запись.
Разбор — docs/sound_plan.md. Включается это явно:
make SND_SRC=msdos resources-sound # перепаковать звук из дистрибутива
make SND_SRC=msdos # и собрать с ним
Источник входит в имя stamp'а, поэтому переключение SND_SRC само делает
звук устаревшим — -B не нужен.
Кто что читает
| Упаковщик | Читает |
|---|---|
pop_pack_bg.py, render_room.py |
SDLPoP/data/{VDUNGEON,VPALACE,LEVELS} |
pop_pack_kid.py |
SDLPoP/data/KID |
pop_pack_guard.py |
SDLPoP/data/{GUARD,SKEL,VIZIER,PRINCE} |
pop_pack_shadow.py |
SDLPoP/data/{KID,SHADOW} |
pop_pack_title.py, pop_pack_intro.py |
SDLPoP/data/{TITLE,PV,PRINCE,KID} |
pop_extract_font.py |
SDLPoP/src/{menu.c,seg009.c} |
pop_extract_kid_data.py |
SDLPoP/src/ (таблицы кадров и seqtbl) |
pop_pack_sound.py |
SDLPoP/data/DIGISND*.DAT (--source sdlpop, умолчание) либо MSDOS/digisnd*.dat (--source msdos) |
pop_pack_music.py |
PoP1_DOS_music/<набор>/ (--format flac|mp3|ogg|mt32) |
Точная раскладка путей — в tools/paths.py; менять её нужно там, а не в
отдельных упаковщиках. Адреса внешних источников — в tools/fetch_orig.py.