L9-INVERT: клип поля при перевороте (мусор в бортах)

Найдено пользователем: после телепорта в перевёрнутом виде ниже поля мусор.
Спрайты, торчащие в обычном виде ВЫШЕ поля (полоса кладки у потолка), после
отражения торчат НИЖЕ и лезут в борт с полосой HP.

blit_b_clip при перевороте режет по обеим границам поля всегда, а не по
pop_t_clip_top; быстрый путь pop_blit_b отдаёт клипующему всё, что выходит
за поле.

Проверено в MAME: телепорт по комнатам в перевёрнутом виде — борта чистые,
комнаты (факелы, чомперы, пол) зеркальны.  Переходы между комнатами в
перевёрнутом виде работают.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-12 18:16:27 +03:00
parent 0be0502388
commit f541c0aad9
2 changed files with 39 additions and 3 deletions
+20 -1
View File
@@ -306,7 +306,26 @@ vflip-двойник. Тем самым зеркалятся и полная о
`g0` станут чисто «полевыми» (деления HP уедут в константы резидента), и
исключений в кэше не останется — эту задачу логично сделать ДО II.4.
## II.5 Клип
## II.5 Клип — ЧАСТЬ СДЕЛАНА 2026-08-12 (поле), остаётся clip_char
**Клип ПОЛЯ сделан.** Симптом (нашёл пользователь): после телепорта в
перевёрнутом виде ниже поля — мусор. Причина: спрайты, которые в обычном
виде торчат ВЫШЕ поля (полоса кладки у потолка, её режет `pop_t_clip_top`),
после отражения торчат НИЖЕ и лезут в борт, где живёт полоса HP.
Фикс в `blit_b_clip`: при перевороте режем по ОБЕИМ границам поля всегда, а
не по `pop_t_clip_top` — зеркальный спрайт может вылезти и там, где в
обычном виде клип не ставили. Плюс в `pop_blit_b` быстрый путь (без клипа)
теперь пропускает в клипующий всё, что выходит за поле.
Проверено в MAME: телепорт по комнатам в перевёрнутом виде — борта чистые,
комнаты рисуются зеркально (факелы, чомперы, пол). То есть **переходы
между комнатами в перевёрнутом виде работают**.
Осталось из этого пункта: `clip_char` (верх поля ↔ низ) и клип падающей
плиты — они про ПЕРСОНАЖЕЙ и падающие объекты, то есть идут вместе с II.4.
### Контракт (исходное описание)
- `clip_char` (`pop_map.c:2287`, таблица `y_clip[5] = {-60,3,66,129,192}`) —
режет верх спрайта по линии ряда; при перевороте линия становится нижней.