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:
@@ -124,6 +124,13 @@ void pop_pot_b(uint8_t id, int x, int yb);
|
||||
/* heal в room-space (со сдвигом POP_YOFF) — все heal слоя фона/loose. */
|
||||
void pop_heal_off(int x, int y, int w, int h);
|
||||
|
||||
/* Чёрная плита по ЭКРАННЫМ координатам, с учётом переворота (POP_FLIP_TOP).
|
||||
* Пишет банком 0x50 — и в видео-ОЗУ, и в ОЗУ-копию, иначе heal вернёт
|
||||
* стёртое. ВСЕ стирания слоя фона обязаны идти через неё, а не через голый
|
||||
* bar: иначе при перевороте плита ложится в неотражённое место (так
|
||||
* ломались решётка и плита-потолок). */
|
||||
void pop_bar_black(int x, int top, int w, int h);
|
||||
|
||||
/* ---- Чтение тайла отрисованной комнаты ------------------------------ */
|
||||
uint8_t pop_tile_code(int row, int col);
|
||||
uint8_t pop_tile_mod(int row, int col);
|
||||
|
||||
Reference in New Issue
Block a user