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
+9
View File
@@ -95,6 +95,15 @@ extern uint8_t pop_flash_color;
* play_seq (опкод JMP_IF_FEATHER — ветки stepfloat/bumpfloat в seqtbl) и
* приложение (сброс на старте уровня, seg003:189). */
extern uint8_t pop_feather;
/* upside_down (seg000:15E9): 1 — картинка перевёрнута вверх ногами (зелье
* типа 4 на уровне 9). Читают все слои отрисовки; сбрасывается стартом
* уровня и смертью Кида (seg000:1224).
* pop_upside_dirty — порт need_redraw_because_flipped: флаг «состояние
* переворота ИЗМЕНИЛОСЬ», по нему главный цикл один раз переворачивает уже
* нарисованное (pop_flip_screen) и снимает флаг. */
extern uint8_t pop_upside;
extern uint8_t pop_upside_dirty;
uint8_t pop_get_item_action(void) __banked; /* 0 нет / 1 присесть / 2 поднять меч / 3 пить */
void pop_proc_get_object(void) __banked; /* эффект — из play_seq (опкод GET_ITEM) */