From 671c947ce9145c789d6aee4a3a363006315e527c Mon Sep 17 00:00:00 2001 From: Alexander Petrov Date: Tue, 18 Aug 2026 12:06:19 +0300 Subject: [PATCH] =?UTF-8?q?impl=5Fdiff:=20=D1=82=D0=B5=D0=BD=D1=8C=20?= =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B0=D0=B9=D1=82=D0=B0=D0=BC=D0=B8=20=D0=9A?= =?UTF-8?q?=D0=B8=D0=B4=D0=B0=20=E2=80=94=20=D0=BE=D1=81=D0=BE=D0=B7=D0=BD?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D0=BE=D0=B5=20=D1=80=D0=B0=D1=81=D1=85=D0=BE?= =?UTF-8?q?=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D0=B5,=20=D0=BD=D0=B5=20=D0=B1?= =?UTF-8?q?=D0=B0=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit XOR-приём оригинала требует чтения видео-ОЗУ (нельзя) и несовместим с 0xFF-прозрачностью; план — отдельный атлас тени. Co-Authored-By: Claude Opus 5 --- applications/PoP/docs/impl_diff.md | 35 ++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) 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`),