L9-INVERT: чёрные плиты слоя фона тоже зеркалятся (баг решётки)
Найдено пользователем: поднимающаяся решётка анимировалась неправильно, а в углу (0,0) оставался чёрный прямоугольник — заливки шли голым bar по НЕПЕРЕВЁРНУТЫМ экранным координатам. Формула переворота вынесена в pop_bg.h (POP_FLIP_TOP) — одна на весь порт, и добавлен pop_bar_black: чёрная плита банком 0x50 с учётом переворота и с пометкой области (bar идёт мимо pop_blit_b). На неё переведены все четыре стирания слоя фона: решётка, полоса потолка, floor_bake, loose_bake_empty. Проверено в MAME: перевёрнутая комната чистая, артефакта в углу нет. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -26,6 +26,14 @@
|
||||
/* Экранный y нижней границы поля (ниже — статус-полоса + борт → клип). */
|
||||
#define POP_CLIP_BOTTOM (POP_YOFF + POP_PLAYFIELD_H)
|
||||
|
||||
/* Экранный верх прямоугольника при ПЕРЕВОРОТЕ (зелье инверсии): поле
|
||||
* отражается внутри себя, борта не трогаются. ОДНА формула на весь порт —
|
||||
* блит тайла, heal точечных перерисовок и чёрные плиты обязаны считать
|
||||
* одинаково, иначе стираем в одном месте, а рисуем в другом (именно так
|
||||
* ломались чомперы и решётка). Зеркалит ВЫЗЫВАЮЩИЙ; у примитивов libbgi
|
||||
* семантика координат не меняется. */
|
||||
#define POP_FLIP_TOP(top, h) (2 * POP_YOFF + POP_PLAYFIELD_H - (top) - (int)(h))
|
||||
|
||||
/* Выбор ядра libbgi (pop_onscreen_cols / pop_heal_fast) переехал в
|
||||
* `_pop_draw.h` — его включают только три рисующих модуля. Из общего
|
||||
* заголовка SDCC размножал мёртвые копии этих inline'ов по всем TU: см.
|
||||
|
||||
Reference in New Issue
Block a user