Разгрузка W1: смена уровня и служебный слой — в банк 8
_main занимал 3658 байт резидента, и добрая половина этого — события «раз в партию». Вынесены целиком: - pop_level_change — смена уровня (катсцена, гашение, загрузка, палитра, звук): 61 строка, наружу осталось одно условие и вызов; - pop_frame_ui — меню, F10 и QuickSave/Load: 58 строк, плюс туда же уехали edge-состояния клавиш и сами коды клавиш (снаружи они больше не нужны). _CODE 24102 -> 23626, запас W2 вырос с 86 до 559 байт. Заодно три правки по замечаниям: - затемнение фона под меню считалось числом «2», а шкала ступеней выросла с 4 до 32 — фон почти не гас. Теперь доля от шкалы (POP_PAL_DIM_BLACK/2); тем же прошлись по остаткам pop_pal_apply(4); - в катсценах персонажи появлялись только после fade in: первый кадр рисуется ПОД чёрной палитрой, и картинка проявляется целиком, вместе с актёрами (cut_scene_8/9/12_short/ending, pre_room_animated, intro_pv_animated); - отладочная полоса по умолчанию выключена. Host-тесты: 15 наборов. Проверено в MAME: меню открывается и закрывается, фон под ним затемнён, полосы нет. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -93,6 +93,23 @@ int pop_boot(void) __banked;
|
||||
* файла нет — молча остаться на текущем. -1 — фатально. */
|
||||
int pop_level_switch(void) __banked;
|
||||
|
||||
/* Смена уровня целиком (катсцена, гашение, загрузка, палитра, звук).
|
||||
* back — страница кадра главного цикла. 0 — ок, -1 — сбой. */
|
||||
int8_t pop_level_change(uint8_t back) __banked;
|
||||
|
||||
/* Клавиши служебного слоя. Живут здесь, а не в roomtest.c: сам обработчик
|
||||
* (pop_frame_ui) переехал в банк, а главный цикл о них больше не знает. */
|
||||
#define KBD_QUICKSAVE 0x0B /* F6, PS/2 set 2 */
|
||||
#define KBD_QUICKLOAD 0x01 /* F9, PS/2 set 2 */
|
||||
#define KBD_MENU 0x76 /* Esc — открыть pause menu (edge) */
|
||||
#define KBD_QUIT 0x09 /* F10 — отладочный немедленный выход (был на Esc,
|
||||
* пока меню не готово рисовать — см. план MS4) */
|
||||
|
||||
/* Меню, F10 и QuickSave/Load на границе кадра. restart_level/dead_reset —
|
||||
* флаги для главного цикла. 0 — продолжаем, 1 — Restart Game, 2 — Quit,
|
||||
* -1 — сбой. */
|
||||
int8_t pop_frame_ui(uint8_t *restart_level, uint8_t *dead_reset) __banked;
|
||||
|
||||
/* Чистый старт настоящей игры после Enter/Esc на title/intro/credits либо
|
||||
* клавиши в attract-demo. Ждёт отпускания клавиши, сбрасывает состояние
|
||||
* новой игры, загружает FIRST_LEVEL и проявляет его первый кадр. */
|
||||
|
||||
Reference in New Issue
Block a user