Тень закрыта: прогон на уровнях 4/5/6/12, расхождение по кайме в impl_diff

This commit is contained in:
2026-08-20 12:33:46 +03:00
parent 22cdc67c3a
commit a3d37bcbfe
2 changed files with 35 additions and 7 deletions
+26
View File
@@ -504,3 +504,29 @@ BUG-CHEAT-FIGHT-1 (выход из боя), и лечится там же.
61,4 мс, то есть в реальном времени на 63 % быстрее, и на глаз это ровно 61,4 мс, то есть в реальном времени на 63 % быстрее, и на глаз это ровно
«страж давит сильнее». Режим NORMAL (дефолт) даёт 102,4 мс — см. «страж давит сильнее». Режим NORMAL (дефолт) даёт 102,4 мс — см.
`frame_pacing_plan.md`. `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) или считать эту кайму прозрачной (силуэт станет
на пиксель уже). Оба хуже нынешнего; трогать только по факту жалобы.
+9 -7
View File
@@ -1,7 +1,7 @@
# Атлас Тени — разбор и план # Атлас Тени — разбор и план
Дата: 2026-08-20. Статус: **СДЕЛАНО** (Ш0-Ш3), проверено на 6-м уровне; Дата: 2026-08-20. Статус: **ЗАКРЫТО.** Ш0-Ш4 сделаны, прогон
уровни 4 и 12 ещё не прогонялись. пользователем на уровнях **4, 5, 6 и 12** — всё корректно.
Задача: сейчас Тень рисуется спрайтами Кида (вне боя) и спрайтами стража Задача: сейчас Тень рисуется спрайтами Кида (вне боя) и спрайтами стража
(в бою) как есть, поэтому от Кида она не отличается. В оригинале её вид (в бою) как есть, поэтому от Кида она не отличается. В оригинале её вид
@@ -256,9 +256,11 @@ XOR идёт по тому, что УЖЕ на экране, то есть ре
**Правило на будущее: любой новый набор палитровых слотов красится ПОСЛЕ **Правило на будущее: любой новый набор палитровых слотов красится ПОСЛЕ
kid.pal, рядом с pop_bg_pal_apply.** kid.pal, рядом с pop_bg_pal_apply.**
## Что осталось ## Проверено
- прогнать уровень 4 (рождение из зеркала) и 12 (бой — там работает Уровни 4 (рождение из зеркала), 5 (кража зелья), 6 (прыжок через
вторая половина набора, `sf*`); пропасть) и 12 (бой — там работает вторая половина набора, `sf*`)
- записать в `impl_diff.md` расхождение из §2 (кайма в один пиксель по прогон пользователя 2026-08-20, расхождений не найдено.
левым кромкам на НЕчёрном фоне).
Расхождение из §2 (кайма в один пиксель по левым кромкам на НЕчёрном
фоне) записано в `impl_diff.md`.