Files
Sprinter-SDCC/applications/SprPoP/docs/README.md
T
snark13 31b82661eb SprPoP: автономное приложение, выделенное из roomtest
Порт PoP переехал в applications/SprPoP — приложение, которое собирается
само: код, оригинальные данные, конверторы ресурсов и сборка внутри одной
папки.  Наружу знает единственный путь — корень тулчейна (SPRINTER_ROOT,
по умолчанию ../..).  applications/PoP/roomtest ЗАМОРОЖЕНА и остаётся
архивом закрытых задач, багов и исполненных планов.

Скопировано из applications/PoP/roomtest@4b74478.  Перенос проверен
побайтово: собранный sprpop.exe совпал с roomtest.exe того же коммита,
все 39 дисковых ресурсов и все 16 генерируемых заголовков — тоже, host-
тесты зелёные (15/15).

Раскладка:
  src/           рукописный C (roomtest.c -> sprpop.c)
  gen/           генерируемые заголовки, в репозитории
  assets/orig/   оригинальные данные игры, вне репозитория (копирайт)
  assets/packed/ то, что ложится на диск, в раскладке диска
  tools/         конверторы; все пути — в одном tools/paths.py
  build/         выход: exe, каталоги ресурсов, hdd/, промежуточные atl/

Сборка ресурсов: assets/packed и gen — версионируемые ВХОДЫ, а не то, что
пересчитывается каждым make.  Автоматика построена на ОТСУТСТВИИ файла, а
не на таймстемпах: git не хранит времена, и в свежем клоне сравнение по
времени превращалось бы в лотерею.  Недостающий ресурс или заголовок
чинится сам, рекурсивным вызовом в ветку генерации.

Музыка собирается из любого из четырёх наборов записей (make music-mp3,
music-mt32, ...); набор входит в имя stamp'а, поэтому смена набора сама
делает музыку устаревшей.  Длины реплик больше не захардкожены: упаковщик
печатает их в gen/pop_music_ticks.h, и шкала сцены выражена через них —
иначе mt32 (реплики на 6% длиннее) молча ломал катсцену.

Тулчейн: в app.mk два обратносовместимых крючка (SRC_DIR/BUILD_DIR),
HDD_IMG стал ?=; команда сборки roomtest не изменилась.  Корневой
make host-tests переключён на SprPoP.

Подгонка тайминга катсцены с принцессой (PV_MAGIC_LEAD): сцена
render-bound и идёт ~49 тиков/с вместо 60, из-за чего кода реплики
приходила раньше молнии.  Это обход, а не лечение; разбор с замерами —
docs/BUGS_OPEN.md, записи SND-PACE-DEAD, PV-RENDER-BOUND, MUS-LEFT-TEAR.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 12:12:28 +03:00

6.0 KiB
Raw Blame History

SprPoP/docs — индекс

Актуальность на 2026-08-26 (перенос из applications/PoP/roomtest). Сюда взято только то, что ещё читают. Исполненные планы остались архивом в ../../PoP/docs/, закрытые задачи и баги — в ../../PoP/roomtest/.

Входные точки

Документ О чём
TASKS_OPEN.md Что берётся в работу сейчас — начинать отсюда
BUGS_OPEN.md Открытые баги и незакрытые оптимизации
impl_diff.md Осознанные расхождения с SDLPoP: где сделано не дословно и почему. Новое расхождение — записью сюда, а не только комментарием в коде
keys.txt Целевая раскладка управления, к которой подгоняем SprPoP

Производительность

Документ О чём
perf_registry.md Реестр оптимизаций: всё отложенное одним списком
perf_backlog.md Отложенная оптимизация отрисовки + как мерить (wait-state'ы, границы кадра)
perf_green_phase.md ЗЕЛЁНАЯ фаза (слой фона): раскладка тактов, способы ускорения G1..G6, журнал правок
perf_cyan_phase.md ЦИАН фаза (персонажи + передний слой): раскладка тактов, C1..C7, журнал правок
perf_l11_room15.md Сцена и замер: факел + чомпер + страж (ур.11 к.15)
perf_l13_room23.md Сцена и метод замера кадра: каскад плит (ур.13 к.23), зонды, канал clog
resident_budget.md Бюджет резидента W1/W2: как мерить и как освобождать
layout_plan_v2.md Раскладка кода по окнам/банкам/страницам + замеры скорости отрисовки

Движок и содержание игры

Документ О чём
full_game_plan.md Полноценная игра: автомат состояний, title/intro, demo, таймер, cutscenes, ending, Hall of Fame
levels_plan.md Уровни: загрузка, переходы, тайлсеты, читы
levels_12_15_plan.md Уровни 12/13 (тень, Джафар, падающие плиты) + что такое 14/15 и 0
midtable_analysis.md Слои отрисовки: back/mid/fore и objtable в оригинале, чего стоит порт
room_model_plan.md kid_room ≠ drawn_room (straddle): сделан S1, остальное впереди
quicksave_plan.md QuickSave/QuickLoad (реализовано): формат снимка POPQ v3 — справочник
menu_settings_plan.md Pause menu и Settings, POP.CFG, VANILLA и задел под ENHANCED
palette_plan.md Карта всех 256 слотов палитры + механика fade
status_line_text.md Строка HP как статус-строка: инвентаризация ВСЕХ текстов SDLPoP
sound_plan.md Звук через CBL: разбор и архитектура
shadow_render.md Вид Тени (OR+XOR) — отложено: почему XOR несовместим с прозрачностью #FF
roomnav_skip.md Комнаты для отладочного телепорта +/: какие пропускать и почему
host_tests_plan.md Модульные тесты движка под ucsim_z80: два шва, регрессии, дифф против SDLPoP

Справочники по оригиналу

Документ О чём
PORT_PLAN.md Общая карта фаз со статусами; §6 модель движения, §10 режим памяти
KID_PLAN.md Модель персонажа: char_type, actions_*, устройство play_seq
gates_spikes_plan.md Раскладка объектов по комнатам, декод LINKLOC/LINKMAP, ссылки на seg-код
PoP/POP-DAT-FormatSpecifications.pdf Каноническая спецификация форматов .DAT (грепаемая копия — .txt)
PoP/MSDOS_RESOURCE_FORMAT.md Наш разбор ресурсов MS-DOS-версии
PoP/APPLEII_RESOURCE_FORMAT.md Наш разбор ресурсов Apple II

Заделы

Документ О чём
ideas_backlog.md Осознанно отложенные гипотезы (мышь, PRNG)
prng_alternatives.md Запасные генераторы, если упрёмся в бюджет кадра

Не переносилось

Исполнено целиком, лежит в ../../PoP/docs/: frame_pacing_plan.md (фиксированный логический кадр), l9_invert_plan.md (зелье переворота), shadow_atlas_plan.md (запечка атласа Тени).