BUG-DOOR-CLIP: обрезка силуэта правым косяком двери уровня
Симптом (нашёл пользователь сразу после L1-EXIT): при подъёме по лестнице за
дверью уровня силуэт Кида вылезал ПРАВЕЕ правого косяка проёма; по высоте
обрезка была корректна.
Причина — недопортированная половина clip_char (seg006:1231). Для кадров
двери оригинал ставит ДВА клипа, у нас был только первый:
obj_clip_top = leveldoor_ybottom + 1; // было
obj_clip_right = leveldoor_right; // не было
Отдельная ловушка: комментарий в SDLPoP говорит «frames 217..228», а КОД
проверяет >= frame_224_exit_stairs_8, то есть 224..228 — портировано по коду.
Fore-слоем это не лечится: створка и косяк уходят в оригинале целиком в
backtable (draw_leveldoor, все add_backtable), рисуются ПОД персонажем и
перекрыть его не могут. Единственный способ — срезать сам спрайт.
libbgi: gfx_blit_cols_part_w(..., uint8_t maxw) — обрезка СПРАВА у
колоночного блита. Для column-major это ровно уменьшение числа колонок, то
есть внутри ядра механизм уже был (так же клипается край экрана,
w = _bgi_maxx + 1 - x), наружу не выводился. Тело блита переехало туда,
gfx_blit_cols_part стал тонкой обёрткой (maxw=0) — тем же приёмом, каким
gfx_blit_cols уже обёрнут вокруг gfx_blit_cols_part. Работает и при flip:
первые maxw нарисованных колонок всегда ложатся в левую часть футпринта.
make size-check: роста нет.
PoP: pop_leveldoor_right / pop_leveldoor_ybottom (порт одноимённых глобалов)
пишет draw_leveldoor в pop_state — их читает clip_char из другого банка;
pop_clip_char_right() отдаёт границу, kid_draw превращает её в maxw и уводит
эти кадры с noclip-пути на общий. Прямоугольник heal (kid_lw) сужается тоже
— стираем ровно нарисованное.
Проверено в MAME: pop_leveldoor_right = 176, что есть ровно (draw_xh<<3)+48
для двери комнаты 9; pop_leveldoor_ybottom = 112 у закрытой створки и 69 у
поднятой — сходится с формулой оригинала. Отрисовку подтвердил пользователь
на живом подъёме.
Заодно: ROOMNAV остаётся включённым осознанно — это наш чит, которого в
оригинале не было, как и S/K/I; позже сведём в общий блок читов.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,10 +6,8 @@
|
||||
а то, **что берём в работу сейчас и в каком порядке**. Каждая запись: что
|
||||
сделать, почему именно сейчас, чем подтверждать результат.
|
||||
|
||||
**Открытые баги** ([`bug_list.md`](bug_list.md)):
|
||||
[BUG-DOOR-CLIP](bug_list.md#bug-door-clip) (Кид не обрезается правым косяком
|
||||
двери уровня) + незакрытые оптимизации [T-1](bug_list.md#t-1),
|
||||
[T-2](bug_list.md#t-2) и незаконченная
|
||||
**Открытых багов нет** ([`bug_list.md`](bug_list.md)): остались незакрытые
|
||||
оптимизации [T-1](bug_list.md#t-1), [T-2](bug_list.md#t-2) и незаконченная
|
||||
[таблица обхода 24 комнат](bug_list.md#обход-всех-24-комнат-уровня-1).
|
||||
|
||||
Правило проекта в силе: механику сверять с `../SDLPoP/src/` ДО кодинга;
|
||||
@@ -373,9 +371,9 @@
|
||||
захлопывает решётку за спиной. Проверено: старт даёт room 1, col 0, падение
|
||||
на row 1 — как по данным уровня.
|
||||
|
||||
⏳ **Остаток:** `#define ROOMNAV` пока ВКЛЮЧЁН — он нужен, чтобы попадать в
|
||||
комнату 9 для работы над [BUG-DOOR-CLIP](bug_list.md#bug-door-clip).
|
||||
Выключить перед L1-PASS.
|
||||
`#define ROOMNAV` оставлен ВКЛЮЧЁННЫМ осознанно: это наш чит, которого в
|
||||
оригинале не было, — как и `S` (выдать меч), `K`, `I`. Все они со временем
|
||||
съедутся в общий блок читов, разрешаемый в настройках (решение 2026-08-01).
|
||||
|
||||
### L1-EXIT. Выход с уровня (дверь уровня) — **СДЕЛАНО 2026-08-01**
|
||||
Портированы: ветка двери уровня из `up_pressed` + `go_up_leveldoor`
|
||||
@@ -397,8 +395,10 @@
|
||||
Вывод на будущее: геометрию персонажа в этом порте меняет `pop_map` (пишет в
|
||||
`Kid`), а не диспетчер.
|
||||
|
||||
⏳ Косметика: [BUG-DOOR-CLIP](bug_list.md#bug-door-clip) — нет обрезки силуэта
|
||||
правым косяком проёма.
|
||||
✅ Косметика тоже закрыта: BUG-DOOR-CLIP (обрезка силуэта правым косяком
|
||||
проёма) — недоставало второй половины `clip_char` (`obj_clip_right`) и
|
||||
обрезки СПРАВА у колоночного блита. В libbgi добавлен
|
||||
`gfx_blit_cols_part_w(..., maxw)`; разбор — в [`bug_closed.md`](bug_closed.md).
|
||||
|
||||
### L1-TRIAGE. Ревизия багов — **ЧАСТЬ 1 СДЕЛАНА 2026-08-01**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user