From 4310f94795cc667949e7d0e44f1e2535fc63b9c7 Mon Sep 17 00:00:00 2001 From: Alexander Petrov Date: Sat, 8 Aug 2026 18:43:13 +0300 Subject: [PATCH] =?UTF-8?q?DRAW-COST=20=D1=88=D0=B0=D0=B3=202=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B4=D0=BE=D1=81=D0=BA=D1=83:=20=D1=86=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=9E=D0=94=D0=9D=D0=9E=D0=99=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D1=80=D0=B8=D1=81=D0=BE=D0=B2=D0=BA=D0=B8=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D1=81=D0=BE=D0=BD=D0=B0=D0=B6=D0=B0=20(=D0=B1=D0=B5?= =?UTF-8?q?=D0=B3=D1=83=D1=89=D0=B8=D0=B9=20=D0=9A=D0=B8=D0=B4=20=E2=80=94?= =?UTF-8?q?=20=D1=86=D0=B8=D0=B0=D0=BD=20~100%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- applications/PoP/roomtest/TASKS_OPEN.md | 26 ++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/applications/PoP/roomtest/TASKS_OPEN.md b/applications/PoP/roomtest/TASKS_OPEN.md index e75fc5c..ccdf6fb 100644 --- a/applications/PoP/roomtest/TASKS_OPEN.md +++ b/applications/PoP/roomtest/TASKS_OPEN.md @@ -55,7 +55,7 @@ | 2 | [L3-CHOMP](#l3-chomp) | **СЛЕДУЮЩАЯ**: чомперы (5 шт) | прохождение ур. 3 | | — | [L3-SKEL](#l3-skel) | скелет ур. 3 — **сделан 2026-08-07**, ждёт финальной приёмки | — | | 3 | [L3-PASS](#l3-pass) | приёмка уровня 3 (обход комнат) | закрытие цели | -| — | [DRAW-COST](#draw-cost) | шаг 1 сделан (пропуск неизменившегося персонажа): в покое 210 % -> **116 %** кадрового периода; дальше узкое место — ЛОГИКА (60 % на тик стоящих персонажей) | плавность на ВСЕХ уровнях | +| — | [DRAW-COST](#draw-cost) | шаг 1 сделан (пропуск неизменившегося персонажа): в покое 210 % -> **116 %**. ШАГ 2 — цена ОДНОЙ перерисовки: бегущий Кид даёт циан почти 100 % | плавность на ВСЕХ уровнях | | — | [L1-SPEED](#l1-speed) | игра на ~39 % быстрее оригинала | ощущение от ВСЕХ уровней; берётся в любой момент | | — | [TUNE-1](#tune-1) | параметры движка → cfg-файл (сейчас `pop_tune.h`) | отладка таймингов и моды; берётся по мере надобности | @@ -358,8 +358,28 @@ W1/W2 (см. [BUG-GUARD-COLOR-1](bug_closed.md#bug-guard-color-1)). понадобится — держать не один прямоугольник, а 3-4 отдельных и мержить только при переполнении. -**Куда идти дальше — теперь это ЛОГИКА, а не отрисовка.** Разбивка работы -кадра брейкпоинтами (комната 3, труп, Кид стоит; всего 500 772 такта): +### Шаг 2 (СЛЕДУЮЩИЙ, назначен пользователем): ДВИЖУЩИЙСЯ Кид + +Пропуск закрывает только покой. Наблюдение пользователя 2026-08-08: как +только Кид побежал, циан-полоса (спрайт + fore-проход) вырастает почти до +**100 % кадрового периода** — и это на ОДНОГО персонажа. То есть цена +одной перерисовки персонажа сама по себе непозволительно велика, и её надо +резать по существу, а не пропусками. + +Куда смотреть (мерить каждое, метод — `z80_profiling_method`): +1. разделить замером спрайт-блит и fore-проход: у fore уже была история + 78 % кадра до кэша кладки (`pop_fore_layer_cost`), он и сейчас главный + подозреваемый; +2. fore-проход перебирает 2×2…3 тайла и в каждом разбирает кладку заново — + кэш «в этом тайле переднего слоя нет вовсе» снял бы половину; +3. расширять перебор ТОЛЬКО по накладным спрайтам (клинок/брызги), а не по + всему окну клипа: габарит кадра уже покрыт футпринтом + правилом меча; +4. heal + блит спрайта: сейчас это два прохода по одной площади; посмотреть, + нельзя ли стирать только РАЗНОСТЬ прямоугольников при мелком сдвиге. + +**Куда идти дальше в ПОКОЕ — там это ЛОГИКА, а не отрисовка.** Разбивка +работы кадра брейкпоинтами (комната 3, труп, Кид стоит; всего 500 772 +такта): | участок | тактов | % кадра | |---|---:|---:|