L9-INVERT: зеркальный слой фона + вход в комнату в банк 8
II.3: pop_upside проведён в единственную точку тайлового слоя (pop_blit_b / blit_b_clip): позиция через FLIP_TOP, блит — vflip-двойник. Этим зеркалятся полная отрисовка комнаты, точечные редрои, trob-анимации, fore-слой и кладка. В клипованном пути обрезка сверху экрана съедает нижние строки источника, поэтому кусок пересчитывается как sy' = h - sy - dh. MEM-COLD2 п.1: enter_room_side/enter_room — в банк 8 (куча 450 -> 1231 Б). Рабочие массивы комнаты остались в _DATA, в банк уехал только код. Проверено в MAME (уровень 9, чит U): комната перевёрнута целиком, пол вверху, дверь и кладка вверх ногами. tests-host 6/6, size-check OK. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -243,7 +243,29 @@ void gfx_copy_rect(uint8_t src_page, int sx, int sy,
|
||||
вероятный класс багов здесь). Решение: зеркалит ВЫЗЫВАЮЩИЙ, у примитивов
|
||||
семантика не меняется.
|
||||
|
||||
## II.3 Фон
|
||||
## II.3 Фон — СДЕЛАНО 2026-08-12
|
||||
|
||||
Флаг проведён в ЕДИНСТВЕННУЮ точку — `pop_blit_b`/`blit_b_clip`
|
||||
(`pop_tile.c`): позиция пересчитывается макросом `FLIP_TOP` (он один на весь
|
||||
слой — дублировать нельзя, иначе двойной переворот), а блит выбирает
|
||||
vflip-двойник. Тем самым зеркалятся и полная отрисовка комнаты, и точечные
|
||||
редрои, и анимации trob, и fore-слой, и кладка — все они ходят через эту
|
||||
функцию.
|
||||
|
||||
Тонкость клипованного пути: при зеркале обрезка СВЕРХУ экрана съедает
|
||||
НИЖНИЕ строки источника, поэтому кусок пересчитывается как
|
||||
`sy' = h - sy - dh`.
|
||||
|
||||
Проверено в MAME (уровень 9, чит U): комната перевёрнута целиком — пол
|
||||
вверху, дверь уровня и кладка вверх ногами. Персонажи пока обычные (II.4).
|
||||
|
||||
Цена: три функции libbgi ушли в резидент, куча 1574 → 450 Б, поэтому тем же
|
||||
заходом сделан **MEM-COLD2 п.1** — `enter_room_side`/`enter_room` уехали в
|
||||
банк 8 (куча вернулась к **1231 Б**, банк занят на 14.6%). Рабочие массивы
|
||||
комнаты остались в `_DATA` и видны обеим половинам; `enter_room` обязана быть
|
||||
`__banked` — её зовёт главный цикл.
|
||||
|
||||
### Контракт (исходное описание)
|
||||
|
||||
Одна точка: `pop_tile.c` (блит куска атласа) выбирает vflip-двойник по
|
||||
`pop_upside` и пересчитывает `y`. Тогда автоматически попадают:
|
||||
|
||||
Reference in New Issue
Block a user