Пики оставались навсегда: запечка фона консервировала выдвинутый кадр
Уровень 7, комната 19. Кнопка в (0,5) при нажатии зовёт pop_floor_bake, а тот перерисовывает и правого соседа — пики (0,6) — в банке, который пишет в ОЗУ-копию. Кадр брался живой, и выдвинутая пика оставалась в фоне: дальше heal возвращал её каждый кадр. В (0,7) чисто, потому что окно клипа запечки кончается на x=219, а колонка 7 начинается с 224. Флаг pop_t_bake_rest («в фон кладём покой») для этого и был, но читал его только pop_loose_frame. Кадр пик считался по месту в ЧЕТЫРЁХ слоях. Добавлен pop_spike_frame — порт get_spike_frame (SDLPoP seg008:08A0), которого у нас не было, — и все четыре слоя переведены на него; заодно позу покоя в запечке стал отдавать pop_chomp_pose. Одна точка лечит все пять путей запечки, включая вход в комнату. Резидент +28 Б, скорость не затронута. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -873,6 +873,46 @@ tp/10 у факелов таблицей, пустой слот соперник
|
||||
|
||||
## P1 — берётся в любой момент
|
||||
|
||||
### <a id="t-render"></a>T-RENDER. Тесты слоя отрисовки: «в запечку не попадает транзиент»
|
||||
|
||||
**Откуда взялось** (пользователь, 2026-08-18, по итогам
|
||||
[SPIKE-BAKED](BUGS_CLOSED.md#spike-baked)): «такой сценарий (и другие с
|
||||
пиками) можно внести в наши тесткейсы?»
|
||||
|
||||
**Что есть сейчас.** `tests-host/` — это ЛОГИКА: геометрия, физика Кида,
|
||||
`Char`, спецсобытия. Отрисовки там нет вовсе (`stubs.c` глушит все блиты
|
||||
пустышками), `pop_tile.c`/`pop_room.c`/`pop_bg.c` не линкуются — таблицы
|
||||
деления на ширину тайла в стабах даже продублированы копией. **Ловушки не
|
||||
покрыты ничем**: ни пик, ни чомперов, ни `animate_*`. То есть SPIKE-BAKED
|
||||
тестами поймать было нельзя в принципе.
|
||||
|
||||
**Что покрывать.** Не «картинку» (её проверяет глаз в MAME), а инвариант,
|
||||
на котором держится вся наша запечка:
|
||||
|
||||
> при `pop_t_bake_rest = 1` ни один слой отрисовки тайла не выдаёт
|
||||
> ТРАНЗИЕНТНЫЙ спрайт — ни своей ячейки, ни соседней.
|
||||
|
||||
Он проверяем механически и стоит ровно того: именно его нарушение дало
|
||||
SPIKE-BAKED, а до того — мерцание плиты, ради которого флаг и заводился.
|
||||
|
||||
**Как.** Новый набор `t_render`: линкуются НАСТОЯЩИЕ `pop_tile.c`,
|
||||
`pop_room.c`, `pop_bg.c`, а `pop_env_b`/`pop_wall_b`/`pop_fore_b` подменяются
|
||||
**записывающим** стабом — списком `(id, x, yb)` за вызов. Тогда проверка
|
||||
пишется в одну строку: «`draw_tile` при `bake_rest=1` и modif пик 4 не выдал
|
||||
ни одного id из `spikes_fram_*`». Тот же стаб сразу закрывает и чомпера, и
|
||||
плиту, и будущие ловушки — по одному тесту на каждую.
|
||||
|
||||
Отдельно и дёшево — характеризация автоматов `animate_spike`/`animate_chomper`
|
||||
(сверка полного цикла модификатора с SDLPoP seg007), но она НЕ ловит этот
|
||||
класс: автомат был верен, врал слой отрисовки.
|
||||
|
||||
**Чего это стоит.** Не одна строка: набор тянет за собой атласы и
|
||||
`pop_cd_*`, а `stubs.c` придётся разделить (сейчас он подменяет то, что
|
||||
здесь нужно настоящим). Прикидка — отдельная сессия. Место в `DATA_LOC`
|
||||
проверить заранее: набор линкует ещё три крупных модуля (см. грабли
|
||||
раскладки в `tests-host/README.md`).
|
||||
|
||||
|
||||
### <a id="qsave"></a>QSAVE. QuickSave / QuickLoad
|
||||
|
||||
> **План целиком — [`../docs/quicksave_plan.md`](../docs/quicksave_plan.md)**
|
||||
|
||||
Reference in New Issue
Block a user