L9-INVERT: heal точечных перерисовок тоже зеркалится (баг чомперов)

Найдено пользователем на первом прогоне зеркального фона: чомперы
анимировались неправильно.  Причина — pop_heal_off: точечные перерисовки
(чомпер, пики, loose, ворота, полоса потолка) чистят фон по КОМНАТНОЙ
координате, и при перевороте heal стирал прямоугольник не там, где тайл
рисуется.  Фикс в единой точке — та же формула FLIP_TOP, что у блита.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-12 17:53:00 +03:00
parent 7c1ded340c
commit abc7ff88ed
+8 -1
View File
@@ -366,9 +366,16 @@ void pop_wall_b(uint8_t id, int x, int yb) { pop_blit_b(&pop_wall_at, id, x, yb)
void pop_fore_b(uint8_t id, int x, int yb) { pop_blit_b(&pop_fore_at, id, x, yb); }
void pop_pot_b(uint8_t id, int x, int yb) { pop_blit_b(&pop_pot_at, id, x, yb); }
/* Heal по КОМНАТНОЙ координате (её и знают точечные перерисовки: чомпер,
* пики, loose, ворота, полоса потолка). При перевороте прямоугольник
* обязан отразиться ровно так же, как сам тайл, — иначе heal чистит одно
* место, а рисует в другое: именно так «ломалась анимация чомперов»
* (найдено пользователем на первом же прогоне зеркального фона). */
void pop_heal_off(int x, int y, int w, int h)
{
pop_heal_fast(x, y + POP_YOFF, w, h);
int top = y + POP_YOFF;
if (pop_upside) top = FLIP_TOP(top, h);
pop_heal_fast(x, top, w, h);
}
/* ---- Чтение тайла отрисованной комнаты ------------------------------ */