impl_diff: тень спрайтами Кида — осознанное расхождение, не баг

XOR-приём оригинала требует чтения видео-ОЗУ (нельзя) и несовместим с
0xFF-прозрачностью; план — отдельный атлас тени.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-18 12:06:19 +03:00
parent af4e64455e
commit 671c947ce9
+35
View File
@@ -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`),