589894c50d
В репозитории нет ни байта чужих данных, но есть знание, откуда их взять: 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
83 lines
5.9 KiB
Markdown
83 lines
5.9 KiB
Markdown
# 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`.
|