Пики оставались навсегда: запечка фона консервировала выдвинутый кадр
Уровень 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:
@@ -121,16 +121,27 @@ extern const uint8_t POP_LOOSE_FRAM_BOTTOM[12]; /* низ дрожащей пл
|
||||
extern const uint8_t POP_CHOMP_FRAM_FOR[5]; /* чомпер: перед (pop_fore!) */
|
||||
|
||||
/* Режим ЗАПЕЧКИ статического фона (запись идёт и в ОЗУ-копию акселератора,
|
||||
* из которой потом восстанавливает heal). В этом режиме дрожащие кадры
|
||||
* ЧУЖИХ плит рисовать НЕЛЬЗЯ: транзиентный кадр законсервируется в копии, а
|
||||
* так как запечка идёт двумя кадрами (по одному на страницу дабл-буфера),
|
||||
* на страницах застынут РАЗНЫЕ кадры — вечное мерцание. Фон обязан быть
|
||||
* состоянием ПОКОЯ; анимация каждый кадр кладётся поверх (банк SPRITE). */
|
||||
* из которой потом восстанавливает heal). В этом режиме ТРАНЗИЕНТНЫЕ кадры
|
||||
* рисовать НЕЛЬЗЯ — ни свои, ни соседские: кадр законсервируется в копии, и
|
||||
* heal будет возвращать его вечно, даже когда ловушка давно вернулась в
|
||||
* покой (пики: BUG-SPIKE-BAKED). А так как запечка идёт двумя кадрами (по
|
||||
* одному на страницу дабл-буфера), на страницах могут застыть ещё и РАЗНЫЕ
|
||||
* кадры — вечное мерцание. Фон обязан быть состоянием ПОКОЯ; анимация
|
||||
* каждый кадр кладётся поверх (банк SPRITE).
|
||||
*
|
||||
* Флаг читают ВСЕ функции «кадр по модификатору»: pop_loose_frame,
|
||||
* pop_spike_frame, pop_chomp_pose. Появится новая анимированная ловушка —
|
||||
* её кадр обязан спрашивать флаг ТАМ ЖЕ, а не в вызывающем слое: слоёв
|
||||
* отрисовки у тайла четыре, и забыть один слишком легко. */
|
||||
extern uint8_t pop_t_bake_rest;
|
||||
|
||||
/* Кадр дрожащей/падающей плиты по её room_modif (seg007 loose_fram_*). */
|
||||
uint8_t pop_loose_frame(uint8_t modif);
|
||||
|
||||
/* Кадр пик по их modif (индекс в spikes_fram_*): 0 = не видно, 5 = вышли
|
||||
* целиком. В режиме запечки — всегда 0 (см. pop_t_bake_rest). */
|
||||
uint8_t pop_spike_frame(uint8_t modif);
|
||||
|
||||
/* Номер позы чомпера по его модификатору (seg008 chomper_fram1): 0..4 —
|
||||
* индекс во ВСЕ три набора кусков (низ/верх/перед) и в кровь (+114/+119). */
|
||||
uint8_t pop_chomp_pose(uint8_t modif);
|
||||
|
||||
Reference in New Issue
Block a user