From abc7ff88ed947b5ee598f14d806e2ee6dd4a748e Mon Sep 17 00:00:00 2001 From: Alexander Petrov Date: Wed, 12 Aug 2026 17:53:00 +0300 Subject: [PATCH] =?UTF-8?q?L9-INVERT:=20heal=20=D1=82=D0=BE=D1=87=D0=B5?= =?UTF-8?q?=D1=87=D0=BD=D1=8B=D1=85=20=D0=BF=D0=B5=D1=80=D0=B5=D1=80=D0=B8?= =?UTF-8?q?=D1=81=D0=BE=D0=B2=D0=BE=D0=BA=20=D1=82=D0=BE=D0=B6=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B5=D1=80=D0=BA=D0=B0=D0=BB=D0=B8=D1=82=D1=81=D1=8F=20?= =?UTF-8?q?(=D0=B1=D0=B0=D0=B3=20=D1=87=D0=BE=D0=BC=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=BE=D0=B2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Найдено пользователем на первом прогоне зеркального фона: чомперы анимировались неправильно. Причина — pop_heal_off: точечные перерисовки (чомпер, пики, loose, ворота, полоса потолка) чистят фон по КОМНАТНОЙ координате, и при перевороте heal стирал прямоугольник не там, где тайл рисуется. Фикс в единой точке — та же формула FLIP_TOP, что у блита. Co-Authored-By: Claude Opus 5 --- applications/PoP/roomtest/pop_tile.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/applications/PoP/roomtest/pop_tile.c b/applications/PoP/roomtest/pop_tile.c index eaf636a..1f8622f 100644 --- a/applications/PoP/roomtest/pop_tile.c +++ b/applications/PoP/roomtest/pop_tile.c @@ -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); } /* ---- Чтение тайла отрисованной комнаты ------------------------------ */