Арка у ворот: спецслучай «Lattice + door A» (seg008:622)
Уровень 5, комната 12, тайл (0,9): чёрная дыра вместо арки. У doortop нет своей базы (base_id 0), и рядом с lattice_down оригинал рисует пару одним спрайтом 6, опущенным на 3 px. Ветки у нас не было. Правка нужна В ДВУХ местах: pop_room.c (сама отрисовка) и toolchain/render_room.py — pop_pack_bg.py собирает атлас по обходу render_room, без этого спрайт 6 не попал бы в pop_env*.atl. Найдено сверкой с оригиналом: prince megahit 5 --screenshot-level даёт карту уровня, снимок MAME совмещается с клеткой комнаты, разница по яркости показала расхождение ровно в (0,9) — 1892 пикселя до фикса, 995 после (остаток = Кид, факел, статус-полоса). Что рисует оригинал в тайле, показала трасса POP_TRACE_BT в add_backtable: id=6 32x63 рядом с id=85 32x4. Методика записана в BUGS_CLOSED.md и memory. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2421,3 +2421,43 @@ if ((Guard.charid != charid_1_shadow || current_level == 12) && ...
|
||||
персонажа). Константа `SHADOW_FIGHT_LEVEL` в `pop_guard.h`.
|
||||
|
||||
**Проверено (пользователь, 2026-08-11):** тень выпивает и уходит, боя нет.
|
||||
|
||||
---
|
||||
|
||||
<a id="bug-lattice-doortop"></a>
|
||||
## BUG-LATTICE-DOORTOP. Чёрная дыра на месте арки у ворот — ЗАКРЫТ
|
||||
|
||||
**Наблюдение (пользователь, 2026-08-11).** Уровень 5, комната 12, тайл
|
||||
(0,9): чёрный квадрат вместо арки.
|
||||
|
||||
**Корень.** `draw_tile_base` (seg008:622) начинается со СПЕЦСЛУЧАЯ, которого
|
||||
у нас не было:
|
||||
|
||||
```c
|
||||
if (tile_left == tiles_26_lattice_down && curr_tile == tiles_12_doortop) {
|
||||
id = 6; // Lattice + door A
|
||||
ybottom += 3;
|
||||
}
|
||||
```
|
||||
|
||||
У `doortop` своей базы нет (`base_id == 0`), поэтому рядом с аркой пара
|
||||
«арка + верх двери» рисуется ОДНИМ спрайтом 6, опущенным на 3 px. Без
|
||||
ветки тайл не рисовал ничего, кроме полоски `bottom_id` 85 (32×4).
|
||||
|
||||
**Фикс.** Ветка добавлена в `pop_room.c` (draw_tile) И в
|
||||
`toolchain/render_room.py` — последнее обязательно: `pop_pack_bg.py`
|
||||
собирает атлас по обходу `render_room`, поэтому без правки скрипта спрайт 6
|
||||
просто не попал бы в `pop_env*.atl` (см. memory `pop_atlas_dynamic_ids`).
|
||||
|
||||
**Как найдено — методика, годная для любого «не так нарисовано»:**
|
||||
|
||||
1. `./prince megahit <N> --screenshot-level` в SDLPoP рисует карту ВСЕГО
|
||||
уровня (комнаты разложены по `roomxs`/`roomys`, клетка 320×192).
|
||||
2. Вырезать нужную комнату и совместить со снимком MAME перебором смещения
|
||||
(у нас совпало на `crop(101, 50, +640, +192)`, масштаб 2×1).
|
||||
3. Разница по порогу яркости даёт карту расхождений: до фикса — белый
|
||||
прямоугольник ровно в (0,9) и 1892 пикселя, после — 995 (Кид, факел,
|
||||
статус-полоса, то есть динамика).
|
||||
4. Что именно рисует оригинал в тайле — трасса `POP_TRACE_BT=1` (печать в
|
||||
`add_backtable`, `src/seg008.c`, выводит room/row/col/id/размер). Она
|
||||
сразу показала `id=6 w=32 h=63` рядом со «своим» `id=85 w=32 h=4`.
|
||||
|
||||
Reference in New Issue
Block a user