diff --git a/applications/PoP/roomtest/NEXT_SESSION.md b/applications/PoP/roomtest/NEXT_SESSION.md index 795a757..924e6ba 100644 --- a/applications/PoP/roomtest/NEXT_SESSION.md +++ b/applications/PoP/roomtest/NEXT_SESSION.md @@ -51,9 +51,28 @@ с меткой `DBGMIRROR` в начале `add_objtable`. Убрать перед следующей сборкой SDLPoP (или оставить — он гейтится по `obj_type == 1 || == 4`). -## 3. ЗАДАЧА НА ЗАВТРА: XOR/OR-блит через акселератор +## 3. XOR/OR-блит через акселератор — СДЕЛАНО 2026-08-11, тень ОТЛОЖЕНА -Единственный открытый пункт `L4-MIRROR` — вид тени. +**Библиотечная часть закрыта.** В libbgi поднят полный набор блочных +операций акселератора — AND/OR/XOR/NOT, строками и колонками: +`gfx_blit_op` / `gfx_blit_part_op`, `gfx_blit_cols_op` / +`gfx_blit_cols_part_wx_op` (клип-окно и флип — как у копирующих близнецов); +опкод операции патчится SMC, одна функция на все операции. `putimage` +лишился попиксельного пути целиком (закрыт пункт 2d-1 `docs/TODO.md`). +Регресс — `tests/accop`, 10/10 PASS в MAME, побайтно; `tests/bgi_img` +получил две байтовые самопроверки. Механика и три ловушки — memory +`accel_block_ops`. + +**Вид тени (два блиттера OR+XOR) отложен решением пользователя** до того, +как будут сделаны все уровни: пока тень рисуется обычной копией из атласов +Кида. Причина не в примитивах — XOR несовместим с нашей прозрачностью +`#FF`, а операция читает ОЗУ-копию экрана, из-за чего два прохода +оригинала вырождаются в один XOR. Всё выясненное, замеры и четыре +варианта — [`../docs/shadow_render.md`](../docs/shadow_render.md). Ключ к +выбору варианта — список кадров, которыми тень реально пользуется +(ожидание: бег, длинный прыжок из зеркала, питьё зелья, боёвка). + +Ниже — исходная постановка задачи, оставлена как справка. **Что установлено (замером, не гипотезой).** Тень уровня 4 в оригинале рисуется ДВУМЯ блитами одного и того же спрайта Кида (seg008:1602):