From d0de6dedf4e7f394543a302e2a2d53fdb3f41868 Mon Sep 17 00:00:00 2001 From: Alexander Petrov Date: Wed, 19 Aug 2026 18:36:04 +0300 Subject: [PATCH] =?UTF-8?q?HEAL-WIDTH:=20heal=20=D1=87=D0=BE=D0=BC=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B0=20=D1=80=D0=BE=D0=B2=D0=BD=D0=BE=2032x60=20?= =?UTF-8?q?=E2=80=94=20=D0=B5=D0=B3=D0=BE=20=D1=82=D0=BE=D1=87=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=20=D1=81=D0=BB=D0=B5=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Замечание пользователя: весь чомпер помещается в свой тайл, значит его heal максимум 32x60. Проверено по каталогу атласа и подтвердилось: нижняя челюсть 101/102 = 32x60 низом на dmy = 63*row+62, занимает 63*row+3 .. +62; верхние челюсти дают ТОТ ЖЕ верх — подъём 0x25 при высоте 23, 0x2F при 13 и 0x32 при 10 все три упираются в 63*row+3; кровь 114..118 шириной 6 рисуется на x+8, то есть внутри 32. Было 64 «на всю высоту тайла» (плюс лишняя строка запаса от прошлой правки) — стало ровно 60 от +3. Заодно зафиксирован разбор структуры перерисовки чомпера: ОДИН heal на тайл и ДВА блита (низ и верх). Объединить блиты нельзя — при раскрытых позах нижняя часть маленькая (32x30, 32x21, 32x17) и между ней и верхней челюстью разрыв: например, при позе 2 низ занимает +33..+62, верх +3..+25, а строки +26..+32 пустые. Проверено в MAME: чомпер рисуется чисто, хвостов от прежнего кадра нет. Co-Authored-By: Claude Opus 5 --- applications/PoP/roomtest/pop_room.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/applications/PoP/roomtest/pop_room.c b/applications/PoP/roomtest/pop_room.c index 6e50927..cb69342 100644 --- a/applications/PoP/roomtest/pop_room.c +++ b/applications/PoP/roomtest/pop_room.c @@ -704,12 +704,15 @@ 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; - /* Высота 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); + /* РОВНО 32x60 — весь чомпер помещается в свой тайл, и это его точный + * след (замечание пользователя, проверено по каталогу атласа): + * нижняя челюсть 101/102 = 32x60 низом на dmy = 63*row+62, то есть + * занимает 63*row+3 .. +62; + * верхние челюсти дают ТОТ ЖЕ верх — подъём 0x25 при высоте 23, + * 0x2F при 13 и 0x32 при 10 все три дают 63*row+3; + * кровь 114..118 шириной 6 рисуется на x+8, то есть внутри 32. + * Было 64 «на всю высоту тайла» — четыре лишние строки. */ + pop_heal_off(x, 63 * row + 3, 32, 60); gfx_set_bank(GFX_BANK_SPRITE); draw_tile(row, col); gfx_set_bank(GFX_BANK_NORMAL);