Пики оставались навсегда: запечка фона консервировала выдвинутый кадр
Уровень 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:
@@ -492,7 +492,7 @@ static void draw_tile(int row, int col)
|
||||
} else if (dt_lcode == 11) { /* loose: правая грань (анимир. по modif соседа-loose) */
|
||||
pop_env_b(LOOSE_FRAM_RIGHT[pop_loose_frame(pop_loose_modif[dt_row * 10 + (dt_col - 1)])], dt_x, dt_dby - 1);
|
||||
} else if (dt_lcode == 2) { /* spike: статич. кадр */
|
||||
uint8_t sf = (dt_lmod & 0x80) ? 5 : dt_lmod;
|
||||
uint8_t sf = pop_spike_frame(dt_lmod);
|
||||
if (sf < 10 && SPIKES_FRAM_RIGHT[sf])
|
||||
pop_env_b(SPIKES_FRAM_RIGHT[sf], dt_x, dt_dmy - 7);
|
||||
} else if (dt_lcode == 16) { /* дверь уровня */
|
||||
@@ -551,8 +551,7 @@ static void draw_tile(int row, int col)
|
||||
* рисуется только правым соседом со сдвигом → шахта над самой пикой
|
||||
* пустая. */
|
||||
if (dt_row >= 0 && dt_code == 2) {
|
||||
uint8_t sm = pop_tile_mod(dt_row, dt_col);
|
||||
uint8_t sf = (sm & 0x80) ? 5 : sm;
|
||||
uint8_t sf = pop_spike_frame(pop_tile_mod(dt_row, dt_col));
|
||||
if (sf > 0 && sf < 10 && POP_SPIKES_FRAM_LEFT[sf])
|
||||
pop_env_b(POP_SPIKES_FRAM_LEFT[sf], dt_x, dt_dmy - 2);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user