diff --git a/applications/SprPoP/docs/TASKS_OPEN.md b/applications/SprPoP/docs/TASKS_OPEN.md index 0408060..4ff44bb 100644 --- a/applications/SprPoP/docs/TASKS_OPEN.md +++ b/applications/SprPoP/docs/TASKS_OPEN.md @@ -1401,6 +1401,55 @@ N навык M» — отдельная надобность, если пона `../docs/ideas_backlog.md` (оба дают доли процента кадра). - **OPT-1** (хирургический редрой шва) — решено НЕ делать, стоимость транзиентная; разбор в [`BUGS_CLOSED.md`](../../PoP/roomtest/BUGS_CLOSED.md). +- **KEYS-D — осмотр соседних комнат** (`H`/`J`/`U`/`N` + `Ctrl+B`, фаза D + плана [`keys_plan.md`](keys_plan.md)). Отложено 2026-08-27 по решению + пользователя: полезно игроку, но дорого. + + **Почему дорого.** У SDLPoP это три строки, потому что там `drawn_room` + влияет ТОЛЬКО на отрисовку, а физика ходит через `get_tile(room, col, + row)` с явной комнатой. У нас наоборот: карта коллизий загружается для + ОТРИСОВАННОЙ комнаты — `room_fg`, `lcol_fg`, `rcol_fg`, `above_fg`, + `below_fg` — это ОДИН комплект на программу, и описывает он `cur_room` + (видно в `pop_qsave_restore_room`). Уведи `cur_room` к соседу, не трогая + `kid_room`, — и Кид начнёт считать столкновения по чужим тайлам: + провалится сквозь пол или упрётся в воздух. + + Задел уже стоит: `kid_room` заведён отдельно, `update_kid_render_dx()` + умеет сдвигать спрайт на ±140 при расхождении. Но `enter_room_side()` + пишет обе переменные разом — это и есть незакрытая часть S3 straddle + ([`room_model_plan.md`](room_model_plan.md)). + + **Два пути.** (1) Честный, как в оригинале: игра идёт, пока смотришь. + Требует развести владельца карты коллизий — правка ядра, дни работы и + риск для того, что уже работает. (2) Смотровой режим С ОСТАНОВКОЙ игры: + пока ничто не тикает, рассогласование не проявляется. Нужна третья, + облегчённая «нарисовать комнату, не трогая состояние»: `enter_room_side` + попутно делает `pop_guard_leave`/`pop_loose_leave_room`, а + `pop_qsave_restore_room` перетирает карту и зовёт `pop_loose_reset`. + Оценка — 150-250 байт в банк 8 и несколько часов с проверкой. + + Рекомендация: путь (2) плюс запись в `impl_diff.md` (у нас смотровой + режим останавливает игру, у оригинала — нет). Главный риск не в + отрисовке, а в ВОЗВРАТЕ: оставить движок с чужой картой или подтёртой + историей heal — класс багов из memory `pop_seam_room_model`. + + Обходной путь, который уже работает: `Ctrl++` / `Ctrl+−` — телепорт по + номеру комнаты. Задачу разбора багов он закрывает, задачу игрока + «подсмотреть» — нет. +- **KEYS-R — воскрешение Кида** (`R`, остаток фазы C). Отложено + 2026-08-27. Не ещё один чит, а правка модели смерти: SDLPoP ставит + `resurrect_time = 20` и `Kid.alive = -1`, после чего об этом обязаны + знать четыре места — убывание счётчика (`seg003:512`), пропуск пик и + челюстей (`seg000:1245`), пропуск урона мечом (`seg000:876`), + восстановление позы в `play_kid` (`seg006:1352`: `loadkid`, полное HP, + стойка, `Char.x += 8`, `set_start_pos`). То есть окно неуязвимости, + размазанное по кадровой цепочке, и оно задевает гейт «мёртв», про + который предупреждает memory `pop_level_restart_scope`. Наш + `Char.alive` использует конвенцию оригинала (`-1` жив), так что + портируется, — но точечно и с проверкой каждого гейта. +- **KEYS-F12 — скриншот в файл** (фаза E). Помечено пользователем как + «возможно, когда-то в следующих версиях»: 80 КБ на кадр и запись на диск + посреди игры. --- diff --git a/applications/SprPoP/docs/keys_plan.md b/applications/SprPoP/docs/keys_plan.md index 9608143..b92386b 100644 --- a/applications/SprPoP/docs/keys_plan.md +++ b/applications/SprPoP/docs/keys_plan.md @@ -1,5 +1,11 @@ # План: перевод управления на раскладку `keys.txt` +> **Состояние на 2026-08-27.** Фазы **A** и **B** сделаны (коммит 76f02e7), +> фаза **C** — три чита из четырёх (f8e96c0). Отложены и записаны на доску +> [`TASKS_OPEN.md`](TASKS_OPEN.md): `KEYS-R` (воскрешение), `KEYS-D` (осмотр +> соседних комнат), `KEYS-F12` (скриншот). Итоговая раскладка, включая наши +> сверхштатные клавиши, — в [`keys.txt`](keys.txt). + Целевая раскладка — [`keys.txt`](keys.txt), она же раскладка SDLPoP. Здесь разобрано, что у нас уже есть, что стоит не на той клавише и каких функций нет вовсе, плюс порядок работ. Кода этот документ не меняет.