diff --git a/applications/PoP/docs/impl_diff.md b/applications/PoP/docs/impl_diff.md index 3cc81cb..2228031 100644 --- a/applications/PoP/docs/impl_diff.md +++ b/applications/PoP/docs/impl_diff.md @@ -282,6 +282,41 @@ foretable ОДНА на весь проход тайлов, персонажи --- +## Тень рисуется спрайтами КИДА, а не XOR-силуэтом + +**Файлы:** `roomtest/pop_cdraw.c` (выбор набора атласов по `charid`/`frame`). +**Дата:** 2026-08-18 (решение принималось раньше, записано здесь). + +**Оригинал** рисует тень тем же кадром Кида, но ДВАЖДЫ — вторым проходом со +сдвигом на один пиксель и через XOR. Получается тёмный силуэт с контуром, +а не «второй Кид». + +**Мы** рисуем тень обычными спрайтами Кида, обычным блиттером — она выглядит +как Кид. + +**Почему.** Приём оригинала — read-modify-write по уже нарисованному, а +читать данные из ВИДЕО-ОЗУ (там, где спрайты) на Sprinter нельзя: читается +только ОЗУ-копия. Блочный XOR у акселератора есть и работает как раз по +ОЗУ-копии, но с нашей прозрачностью он несовместим: прозрачность сделана +подавлением записи 0xFF, а XOR прозрачные пиксели тоже смешает — под него +нужен набор с прозрачным 0x00 (замер: memory `accel_block_ops`, +`sprinter_vram_transparency`). То есть «сделать как в оригинале» всё равно +упирается в отдельный набор спрайтов. + +**Чем платим.** Тень визуально неотличима от Кида (уровни 4/5/6/12). На +механику не влияет: слот, окна `Char`, ИИ и коллизия у тени свои и от +картинки не зависят. + +**План.** Отдельный АТЛАС ТЕНИ (готовый силуэт), а не воспроизведение +XOR-прохода: один набор спрайтов вместо второго пути блита. До тех пор +расхождение сознательное — багом не заводить. + +**Что проверять при регрессе.** Уровень 6 комната 1: тень стоит слева +через провал, поза совпадает с позой Кида-в-стойке. Родственная запись — +«Слияние с тенью» ниже. + +--- + ## Слияние с тенью: мигания Кида спрайтами тени нет **Файлы:** `roomtest/guards.c` (`autocontrol_shadow_level12`),