Files
Sprinter-SDCC/applications/SprPoP/docs
snark13 a5252b1c60 SprPoP: глубокое ревью находок А/Б — исправимость и цена по скорости
КОД НЕ МЕНЯЛСЯ.  Разбор одиннадцати находок рангов А и Б: что менять, во
что это обойдётся по скорости и памяти, каков риск.

СНЯТО ГЛАВНОЕ ПРЕПЯТСТВИЕ.  Обоснование двух упрощений (guards.c:1011 —
«нужны тайловые запросы от Char, а pop_map умеет только от Kid»)
УСТАРЕЛО: get_tile_at_char, get_tile_infrontof_char, get_tile_behind_char
и distance_to_edge_weight в pop_map.c уже работают от Char, они лишь не
выведены в заголовок.  Данные тоже на месте — pop_char_set_seq ставит
любую из 115 последовательностей, то есть seq_81 и seq_64 доступны без
единого нового байта.  Три находки упираются не в архитектуру, а в четыре
строки объявлений.

СКОРОСТЬ.  Места классифицированы по частоте вызова: play_seq и ИИ стража
— горячие, land/in_wall/bumped/hurt_by_sword — событийные.  Из
одиннадцати правок две УСКОРЯЮТ код (уходит условие из горячего цикла;
звук перестаёт играть в двух случаях из трёх), большинство бесплатны
(перестановка строк), и ни одна не требует переделки архитектуры.

Единственный конфликт со скоростью — отложенная побудка чомперов:
play_seq маппит страницу байткода в W0 один раз перед циклом, и звать
start_chompers внутри цикла значило бы снимать и возвращать окно на
каждый переход ряда.  Дешёвая замена: копить не один флаг, а битовую
маску рядов и разбудить их после цикла — теряться ряды перестанут, цена
в цикле нулевая.  Для стражей аналогично: не межбанковый вызов wall_type,
а копия таблицы в 32 байта в своём банке.

Порядок работ — от «одна-две строки, низкий риск» (13, 24) к тем, где
правка может компенсировать наши отличия в другом месте (1, 7).

Политика: для критичных фиксов скорость не вето — такие выносятся в
отдельный разбор с поиском дешёвого способа.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011MsUsEFAQfsjjQpJ7RtKVY
2026-08-31 18:31:34 +03:00
..

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
keys_plan.md План перевода на неё: что совпадает, что переназначить, каких функций нет вовсе
../assets/orig/README.md Откуда берутся исходные данные: make fetch (SDLPoP + музыка), зачем нужен и почему необязателен MSDOS/, SND_SRC

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

Документ О чём
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: разбор и архитектура
music_runtime_index_plan.md Будущее улучшение: runtime-индексы музыки и PCM-эффектов, смена аудионаборов без перелинковки EXE
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 (запечка атласа Тени).