L9-INVERT: состояние переворота, зелье типа 4 и pop_flip_screen

Шаг II.1 плана.  pop_upside/pop_upside_dirty (порт upside_down и
need_redraw_because_flipped), ветка case 4 в proc_get_object (только тоггл —
ни вспышки, ни урона, как в оригинале), сброс стартом уровня и смертью Кида.

pop_flip_screen (банк 8) переворачивает уже нарисованное двумя копиями
акселератора: VFLIP в скрытую страницу, показ, DIRECT во вторую; затем
инвалидация слотов персонажей, метки фона и полосы HP.

Чит-клавиша U — порт seg000:0793 (в оригинале переворот тоже на чите): без
неё эффект не проверить, чит-телепорт до зелья в комнате 7 не дотягивается.

Проверено в MAME на уровне 9: комната переворачивается целиком за кадр,
повторное нажатие возвращает.  Персонажи и факелы пока не зеркалятся —
это шаги II.3/II.4.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-12 16:48:08 +03:00
parent 7fe4c25ad1
commit b1ef48bd16
7 changed files with 144 additions and 5 deletions
+26 -1
View File
@@ -170,7 +170,32 @@ void gfx_copy_rect(uint8_t src_page, int sx, int sy,
# Часть II — приложение (roomtest)
## II.1 Состояние и момент переключения
## II.1 Состояние и момент переключения — СДЕЛАНО 2026-08-12
Проверено в MAME (уровень 9, комната 7): нажатие чита переворачивает всю
комнату целиком за один кадр, повторное — возвращает. Персонажи и
анимируемые тайлы (факелы) пока рисуются НЕ зеркально — это шаги II.3/II.4.
Что появилось:
- `pop_upside` + `pop_upside_dirty` (порт `upside_down` и
`need_redraw_because_flipped`) в `pop_map.c`;
- ветка `case 4` в `pop_proc_get_object`: только тоггл, без вспышки и урона
(как seg006:1885);
- сброс в `pop_start_level` (seg003:38/188) и по смерти Кида (seg000:1224);
- `pop_flip_screen()` в банке 8: `gfx_copy_page(VFLIP)` в скрытую страницу →
показать её → `gfx_copy_page(DIRECT)` во вторую → инвалидация слотов
персонажей, метки «фон трогали» и полосы HP;
- **чит-клавиша U** — это ПОРТ, а не костыль: в оригинале переворот тоже
висит на чит-клавише (seg000:0793). Без неё эффект проверяется только
честным проходом уровня 9 до комнаты 7 — чит-телепорт до зелья не
дотягивается (оно на `(1,7)`, а навигация ставит Кида на нижний ряд).
Цена: резидент +602 Б (новые функции libbgi линкуются в него), куча
1707 → 1050 Б. Это аргумент за [MEM-COLD2](../roomtest/TASKS_OPEN.md#mem-cold2)
до начала II.4.
### Контракт (исходное описание шага)
- `pop_upside` (uint8_t) — рядом с `pop_feather` в `pop_map.c`, экспорт в
`pop_map.h`;