Фикс переворота: отсев тайлов по fore-окну — в ЛОГИЧЕСКИХ координатах

Симптом (нашёл пользователь, ур. 9): в перевёрнутом виде Кид рисуется ПЕРЕД
передней колонной — передние грани его больше не перекрывают.

Причина: окно fore-клипа задаётся прямоугольником уже перевёрнутого спрайта,
то есть в ЭКРАННЫХ координатах, а весь отсев «задевает ли ТАЙЛ окно» считает
позицию тайла из его РЯДА (63*row + …) — величину логическую, от переворота
не зависящую.  Сравнивались разные системы координат, и выбрасывались ровно
те тайлы, что должны лечь поверх персонажа.

Заведена вторая пара границ того же окна — pop_t_fclip_ly0/ly1 (логические,
ставятся в pop_fore_set_clip).  По ней теперь идут ВСЕ отсевы по тайлам:
tile_in_fclip, грубый отсев в pop_blit_b, wp_vis, wpp_fill и отсев кладки в
pop_wall_b, а также выбор диапазона рядов в pop_fore_over_char.  Экранная
пара осталась там, где режется сам блит (он работает с уже перевёрнутым
прямоугольником).

Проверено в MAME: колонна снова перекрывает перевёрнутого Кида.
tests-host 6/6.
This commit is contained in:
2026-08-12 22:39:55 +03:00
parent 755190674c
commit c4dd2c7a87
3 changed files with 35 additions and 11 deletions
+5
View File
@@ -70,6 +70,11 @@ extern int pop_t_clip_top;
* кадра при бюджете 430 000. С окном большинство кусков отсекается целиком,
* остальные режутся до пересечения. */
extern int pop_t_fclip_x0, pop_t_fclip_y0, pop_t_fclip_x1, pop_t_fclip_y1;
/* Та же рамка в ЛОГИЧЕСКИХ координатах (без переворота). Всё, что решает
* «задевает ли ТАЙЛ окно», обязано сравнивать по ней: позиция тайла в
* комнате от переворота не зависит. Экранная пара — только для клипа
* блита, который режет уже перевёрнутый прямоугольник. */
extern int pop_t_fclip_ly0, pop_t_fclip_ly1;
extern uint8_t pop_t_fclip_on;
/* ---- Таблица тайлов (piece, seg008.c:27) ---------------------------- */