HEAL-WIDTH: ширина heal'ов по фактическому следу из атласа

Задача была помечена обязательной.  Габариты сняты из каталогов .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 <noreply@anthropic.com>
This commit is contained in:
2026-08-19 18:25:35 +03:00
parent a29fb8da34
commit f62989e358
+12 -2
View File
@@ -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);