From a3d37bcbfe9653f6933f532413762572bb3dc75a Mon Sep 17 00:00:00 2001 From: Alexander Petrov Date: Thu, 20 Aug 2026 12:33:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A2=D0=B5=D0=BD=D1=8C=20=D0=B7=D0=B0=D0=BA?= =?UTF-8?q?=D1=80=D1=8B=D1=82=D0=B0:=20=D0=BF=D1=80=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D0=BD=20=D0=BD=D0=B0=20=D1=83=D1=80=D0=BE=D0=B2=D0=BD=D1=8F?= =?UTF-8?q?=D1=85=204/5/6/12,=20=D1=80=D0=B0=D1=81=D1=85=D0=BE=D0=B6=D0=B4?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=20=D0=BA=D0=B0=D0=B9?= =?UTF-8?q?=D0=BC=D0=B5=20=D0=B2=20impl=5Fdiff?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- applications/PoP/docs/impl_diff.md | 26 ++++++++++++++++++++++ applications/PoP/docs/shadow_atlas_plan.md | 16 +++++++------ 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/applications/PoP/docs/impl_diff.md b/applications/PoP/docs/impl_diff.md index ba91ef0..4a86f4f 100644 --- a/applications/PoP/docs/impl_diff.md +++ b/applications/PoP/docs/impl_diff.md @@ -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) или считать эту кайму прозрачной (силуэт станет +на пиксель уже). Оба хуже нынешнего; трогать только по факту жалобы. diff --git a/applications/PoP/docs/shadow_atlas_plan.md b/applications/PoP/docs/shadow_atlas_plan.md index 59d97fa..3c838c6 100644 --- a/applications/PoP/docs/shadow_atlas_plan.md +++ b/applications/PoP/docs/shadow_atlas_plan.md @@ -1,7 +1,7 @@ # Атлас Тени — разбор и план -Дата: 2026-08-20. Статус: **СДЕЛАНО** (Ш0-Ш3), проверено на 6-м уровне; -уровни 4 и 12 ещё не прогонялись. +Дата: 2026-08-20. Статус: **ЗАКРЫТО.** Ш0-Ш4 сделаны, прогон +пользователем на уровнях **4, 5, 6 и 12** — всё корректно. Задача: сейчас Тень рисуется спрайтами Кида (вне боя) и спрайтами стража (в бою) как есть, поэтому от Кида она не отличается. В оригинале её вид @@ -256,9 +256,11 @@ XOR идёт по тому, что УЖЕ на экране, то есть ре **Правило на будущее: любой новый набор палитровых слотов красится ПОСЛЕ kid.pal, рядом с pop_bg_pal_apply.** -## Что осталось +## Проверено -- прогнать уровень 4 (рождение из зеркала) и 12 (бой — там работает - вторая половина набора, `sf*`); -- записать в `impl_diff.md` расхождение из §2 (кайма в один пиксель по - левым кромкам на НЕчёрном фоне). +Уровни 4 (рождение из зеркала), 5 (кража зелья), 6 (прыжок через +пропасть) и 12 (бой — там работает вторая половина набора, `sf*`) — +прогон пользователя 2026-08-20, расхождений не найдено. + +Расхождение из §2 (кайма в один пиксель по левым кромкам на НЕчёрном +фоне) записано в `impl_diff.md`.