From f62989e35869d8a37855d56283db9dcbd171150b Mon Sep 17 00:00:00 2001 From: Alexander Petrov Date: Wed, 19 Aug 2026 18:25:35 +0300 Subject: [PATCH] =?UTF-8?q?HEAL-WIDTH:=20=D1=88=D0=B8=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D0=B0=20heal'=D0=BE=D0=B2=20=D0=BF=D0=BE=20=D1=84=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=BC=D1=83=20=D1=81?= =?UTF-8?q?=D0=BB=D0=B5=D0=B4=D1=83=20=D0=B8=D0=B7=20=D0=B0=D1=82=D0=BB?= =?UTF-8?q?=D0=B0=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Задача была помечена обязательной. Габариты сняты из каталогов .atl, а не «по клеткам на глаз»: плита 41/69/70 = 32x13-14 43/73/74 = 32x3 42/71/72 = 26x15-16 чомпер 101/102 = 32x60 111 = 27x23 113 = 23x10 Отсюда два сужения: pop_loose_shake_draw ширина 64 -> 58 (свой тайл 32 + правая грань 26, во дворце 25) pop_chomp_redraw высота 64 -> 61 (след 63*row+3..62: верх самого высокого bot-кадра и низ на dmy; верхняя челюсть при подъёме 0x32 и высоте 10 даёт ровно +3) Замер 11/15: медиана не сдвинулась (437 484 — плит в комнате нет), максимум 550 776 -> 549 816, то есть эффект только в кадрах перерисовки чомпера и он мал, как и предсказал пользователь. Основной выигрыш от сужения плиты (9,4 % площади) ждёт сцены 13/23 и требует отдельного прогона на сборке LEVEL=13. Пики не трогал: их таблицы кадров (POP_SPIKES_FRAM_LEFT/RIGHT) я по атласу не разбирал, а сужать heal по догадке — прямой путь к недочищенному хвосту. Проверено в MAME: чомпер и факелы рисуются чисто, хвостов нет; хост-тесты зелёные. Co-Authored-By: Claude Opus 5 --- applications/PoP/roomtest/pop_room.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/applications/PoP/roomtest/pop_room.c b/applications/PoP/roomtest/pop_room.c index 3cd5424..6e50927 100644 --- a/applications/PoP/roomtest/pop_room.c +++ b/applications/PoP/roomtest/pop_room.c @@ -618,7 +618,12 @@ void pop_loose_shake_draw(int row, int col) __banked * NB: печёный кадр-0 может слегка просвечивать по кромкам — чистое * решение (bake тайла как empty + рисовать loose всегда динамически) * отложено; wipe-в-чёрный делал плиту невидимой — не годится. */ - pop_heal_off(x, 63 * row + 46, 64, 24); + /* Ширина 58, а не 64 = «две клетки»: реальный след дрожащей плиты — + * свой тайл (верх/левая грань 32 px) плюс правая грань, которая уходит + * в соседнюю клетку на 26 px (25 во дворце). Габариты сняты из + * каталогов атласов: 41/69/70 = 32x13-14, 43/73/74 = 32x3, + * 42/71/72 = 26x15-16. Задача HEAL-WIDTH. */ + pop_heal_off(x, 63 * row + 46, 58, 24); gfx_set_bank(GFX_BANK_SPRITE); draw_tile(row, col); /* loose: лево+низ (анимир.) */ if (col + 1 < 10) @@ -699,7 +704,12 @@ void pop_spike_redraw(int row, int col) __banked void pop_chomp_redraw(int row, int col) __banked { int x = POP_COL_XH[col] * 8; - pop_heal_off(x, 63 * row + 2, 32, 64); + /* Высота 61, а не 64: след чомпера по вертикали — от 63*row+3 (верх + * самого высокого bot-кадра, 32x60 низом на dmy = 63*row+62) до + * 63*row+62. Верхняя челюсть выше не забирается: её подъём 0x32 = 50 + * при высоте 10 даёт 63*row+3. Габариты из каталога атласа + * (101/102 = 32x60, 111 = 27x23, 113 = 23x10). Задача HEAL-WIDTH. */ + pop_heal_off(x, 63 * row + 2, 32, 61); gfx_set_bank(GFX_BANK_SPRITE); draw_tile(row, col); gfx_set_bank(GFX_BANK_NORMAL);