Тень закрыта: прогон на уровнях 4/5/6/12, расхождение по кайме в impl_diff
This commit is contained in:
@@ -504,3 +504,29 @@ BUG-CHEAT-FIGHT-1 (выход из боя), и лечится там же.
|
||||
61,4 мс, то есть в реальном времени на 63 % быстрее, и на глаз это ровно
|
||||
«страж давит сильнее». Режим NORMAL (дефолт) даёт 102,4 мс — см.
|
||||
`frame_pacing_plan.md`.
|
||||
|
||||
## Тень: кайма силуэта не подкрашивается фоном
|
||||
|
||||
**Оригинал.** Спрайт Тени не хранится — он кладётся ДВАЖДЫ: обычным
|
||||
прозрачным блитом в x и «блиттером XOR» в x+1 (`draw_objtable_item`,
|
||||
seg008.c:1600). XOR идёт по 24-битному RGB того, что УЖЕ на экране
|
||||
(`blit_xor`, seg009.c:3190), поэтому там, где спрайт прозрачен в x, но
|
||||
непрозрачен в x−1, цвет получается как `фон XOR цвет спрайта`.
|
||||
|
||||
**У нас.** Пакетный блит наложения на себя не умеет, поэтому результат
|
||||
запечён в отдельный атлас (`toolchain/pop_pack_shadow.py`,
|
||||
`docs/shadow_atlas_plan.md`). Запекать пришлось для КОНКРЕТНОГО фона, и
|
||||
выбран чёрный: на нём `фон XOR цвет == цвет`, то есть запечка точна.
|
||||
|
||||
**Чем платим.** Ровно одним: **кайма в один пиксель по ЛЕВЫМ кромкам
|
||||
силуэта** на НЕчёрном фоне. У оригинала она принимает оттенок фона, у нас
|
||||
всегда «свой» цвет. Внутренность силуэта и правые кромки совпадают точно —
|
||||
там первый проход уже закрасил пиксель, и от фона результат не зависит.
|
||||
|
||||
**Почему это приемлемо.** Тень бывает на четырёх уровнях, и почти всегда
|
||||
на чёрном: у зеркала (ур. 4), в проёме (5), над пропастью (6), в бою (12).
|
||||
|
||||
**Что проверять при регрессе.** Если Тень окажется на светлом фоне и
|
||||
кайма станет резать глаз — вариантов два: запечь второй набор под светлый
|
||||
фон (ещё 32 страницы EMM) или считать эту кайму прозрачной (силуэт станет
|
||||
на пиксель уже). Оба хуже нынешнего; трогать только по факту жалобы.
|
||||
|
||||
Reference in New Issue
Block a user