From ec1f384688ecc069c201d5e44e161d0127a185a4 Mon Sep 17 00:00:00 2001 From: Alexander Petrov Date: Mon, 17 Aug 2026 22:42:06 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D1=80=D0=BE=D0=B2=D0=B5=D0=BD=D1=8C=202?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=D0=BD=D1=8F=D1=82;=20=D0=B2=20README=20?= =?UTF-8?q?=E2=80=94=20=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D1=80=D0=BA=D0=B0,?= =?UTF-8?q?=20=D1=87=D1=82=D0=BE=20=D0=B8=D0=BC=D0=BC=D0=BE=D1=80=D1=82?= =?UTF-8?q?=D0=B0=D0=BB=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=B2=20?= =?UTF-8?q?=D0=B1=D0=BE=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Обход уровней после оптимизации фаз: уровни 1 и 2 пройдены, критичных багов не осталось. Найденное по дороге закрыто и перечислено в шапке TASKS_OPEN.md, чтобы регресс-база была видна одним взглядом. README раньше читы не перечислял вовсе. Теперь у бессмертия явно записано главное ограничение — работает ТОЛЬКО с мечом в руке — и почему оно не косметическое: кадры seq_74 все с мечом, и подмена смерти на эту анимацию оставляла Кида в стойке при sword == 0, где у control() нет ни одной ветки. На физику (падения/пики/чомперы) бессмертие действует всегда. Co-Authored-By: Claude Opus 5 --- applications/PoP/roomtest/README.md | 14 ++++++++++++++ applications/PoP/roomtest/TASKS_OPEN.md | 15 +++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/applications/PoP/roomtest/README.md b/applications/PoP/roomtest/README.md index b4b197c..a0a66c2 100644 --- a/applications/PoP/roomtest/README.md +++ b/applications/PoP/roomtest/README.md @@ -27,6 +27,20 @@ ESC выход. проблемный кадр на `1`, спокойно рассмотреть/снять пиксели — в т.ч. удалённо из MAME MCP-моста, пока анимация стоит. +**Читы** (`pop_cheat.h`; в релизной сборке выключаются через `pop_cheats`): +- **I** — бессмертие Кида (toggle). **Работает ТОЛЬКО в бою, то есть с + мечом в руке.** Удар по безоружному Киду остаётся смертельным — ровно как + в оригинале (seg002 `hurt_by_sword`: *«Being hurt when not in fighting pose + means death»*, `take_hp(100)`). Ограничение не косметическое: анимация + «получил удар» (`seq_74`) состоит из кадров 150..179, которые ВСЕ с мечом, + и подмена смерти на неё оставляла Кида в боевой стойке при `sword == 0` — + состоянии, для которого у диспетчера `control()` нет ни одной ветки, то + есть с намертво зависшим управлением + ([BUG-CHEAT-IMM-1](BUGS_CLOSED.md#bug-cheat-imm-1)). На физику (падения, + пики, чомперы) бессмертие действует всегда, независимо от меча. +- **K** — убить стража, **S** — выдать меч, **Shift+L** — следующий уровень, + **+/−** — обход комнат. + Эталон вида комнаты — `../toolchain/1.1-2.png`. ## Модули diff --git a/applications/PoP/roomtest/TASKS_OPEN.md b/applications/PoP/roomtest/TASKS_OPEN.md index 8721dc4..6d65369 100644 --- a/applications/PoP/roomtest/TASKS_OPEN.md +++ b/applications/PoP/roomtest/TASKS_OPEN.md @@ -29,6 +29,21 @@ - **libbgi:** блочные AND/OR/XOR/NOT акселератора (2026-08-11, `tests/accop`) — задел под вид тени и под любые эффекты «поверх того, что уже нарисовано». +**Обход уровней после оптимизации фаз — идёт сейчас (начат 2026-08-17).** +Оптимизация зелёной/циан фаз тронула порядок пометок и перерисовок, поэтому +уровни проходятся заново подряд: + +| уровень | статус | что нашлось и закрыто по дороге | +|---|---|---| +| 1 | **принят** (2026-08-17) | мерцание торцов плит/полов/кнопок (запечка шире копируемого прямоугольника); потолочный fore поверх падающей плиты (не было ряда −1 в проходе foretable); соседний пол под плитой (потерянная половина `draw_mob` — `set_redraw2`); залипший блеск меча (`trob_drawn` не совпадал с тем, что нарисует полная отрисовка) | +| 2 | **принят** (2026-08-17) | чёрные бары поверх стража — `bar` с `x + w > 320` заворачивался в соседнюю страницу видеопамяти (`dd40c24`); [BUG-CHEAT-IMM-1](BUGS_CLOSED.md#bug-cheat-imm-1) — боевая стойка без меча под читом бессмертия | +| 3+ | не начат | | + +Критичных багов на уровнях 1 и 2 не осталось. Следом — регресс тактов на +23/13 (документы фаз: [`../docs/perf_green_phase.md`](../docs/perf_green_phase.md), +[`../docs/perf_cyan_phase.md`](../docs/perf_cyan_phase.md), сцена и метод — +[`../docs/perf_l13_room23.md`](../docs/perf_l13_room23.md)). + Правило проекта в силе: механику сверять с `../SDLPoP/src/` ДО кодинга; диагноз платформы подтверждать артефактом (брейкпоинт/дамп/.asm), а не гипотезой (memory `defer_unexplained_quirks`).