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:
@@ -576,8 +576,7 @@ void pop_ceil_bake_empty(int col) __banked
|
||||
int x = POP_COL_XH[col] * 8;
|
||||
pop_cd_touch(x, POP_YOFF, 64, CEIL_BAND_H + 1); /* bar мимо pop_blit_b */
|
||||
gfx_set_bank(GFX_BANK_NORMAL);
|
||||
setfillstyle(SOLID_FILL, BLACK);
|
||||
bar(x, POP_YOFF, x + 63, POP_YOFF + CEIL_BAND_H); /* стереть плиту в ОЗУ-копии */
|
||||
pop_bar_black(x, POP_YOFF, 64, CEIL_BAND_H + 1); /* стереть плиту в ОЗУ-копии */
|
||||
gfx_set_bank(GFX_BANK_TRANSPARENT);
|
||||
pop_t_clip_top = POP_YOFF;
|
||||
pop_t_bake_rest = 1; /* фон = покой (см. pop_t_bake_rest) */
|
||||
@@ -681,8 +680,7 @@ void pop_floor_bake(int row, int col) __banked
|
||||
* НИЗ строго yb+64 (≈ низ передней грани пола): ниже — СТЕНА ряда ниже
|
||||
* (высокий спрайт), которую тут не перерисовываем → иначе чёрный бар. */
|
||||
gfx_set_bank(GFX_BANK_NORMAL);
|
||||
setfillstyle(SOLID_FILL, BLACK);
|
||||
bar(x, yb + 26, x + 59, yb + 64);
|
||||
pop_bar_black(x, yb + 26, 60, 39);
|
||||
gfx_set_bank(GFX_BANK_TRANSPARENT);
|
||||
pop_t_bake_rest = 1; /* фон = покой (см. pop_t_bake_rest) */
|
||||
draw_tile(row, col);
|
||||
@@ -725,10 +723,7 @@ void pop_gate_redraw(int row, int col) __banked
|
||||
if (col + 1 > 9 || row < 0 || row > 2) return;
|
||||
x = POP_COL_XH[col + 1] * 8;
|
||||
yt = POP_YOFF + 63 * row;
|
||||
pop_cd_touch(x, yt + 3, 32, 62); /* bar мимо pop_blit_b (DRAW-COST) */
|
||||
gfx_set_bank(GFX_BANK_NORMAL);
|
||||
setfillstyle(SOLID_FILL, BLACK);
|
||||
bar(x, yt + 3, x + 31, yt + 64);
|
||||
pop_bar_black(x, yt + 3, 32, 62); /* зеркалится сама (переворот) */
|
||||
gfx_set_bank(GFX_BANK_TRANSPARENT);
|
||||
draw_tile(row, col + 1);
|
||||
gfx_set_bank(GFX_BANK_NORMAL);
|
||||
@@ -761,7 +756,7 @@ void pop_loose_bake_empty(int row, int col) __banked
|
||||
pop_cd_touch(x, yb, 72, POP_YOFF + 63 * row + 66 - yb);
|
||||
gfx_set_bank(GFX_BANK_NORMAL);
|
||||
setfillstyle(SOLID_FILL, BLACK);
|
||||
bar(x, yb, x + 39, POP_YOFF + 63 * row + 65); /* сам тайл: +40 (кусок пола заходит вправо; сосед перерисуется) */
|
||||
pop_bar_black(x, yb, 40, POP_YOFF + 63 * row + 65 - yb + 1); /* сам тайл: +40 (кусок пола заходит вправо; сосед перерисуется) */
|
||||
if (col + 1 < 10)
|
||||
bar(xr, yb, xr + 31, POP_YOFF + 63 * row + 65); /* сосед: РОВНО 32 — не залезть в col+2 (его не перерисовываем) */
|
||||
/* Новый статич. фон: сам тайл (empty → «стена вниз» topright комнаты
|
||||
|
||||
Reference in New Issue
Block a user