Доки: план меню (рендер, restart без подтверждения), QSAVE закрыт
menu_settings_plan.md: - §10 переписан: выбран Вариант A — текстовые строки + собственный растровый рендерер в новом банке; референс SDLPoP (hc_small_font / hc_font — один рендерер, два шрифта); шрифт как ассет из паковщика, прототип MS4 — системный CP866 ZG; двуязычность eng/rus через пару (таблица строк CP866, файл шрифта) - Restart Level / Restart Game выполняются сразу, без подтверждения (§3, §8, из §11 убраны диалоги RESTART *?) - §13 MS4: текстовый рендерер + два шрифта; §14: host-тест рендерера quicksave_plan.md: статус «РЕАЛИЗОВАНО и проверено в MAME» (v0.6-pop-quicksave), документ оставлен справочником по формату 'POPQ' TASKS_OPEN/TASKS_CLOSED: запись QSAVE переехала в закрытые с полным протоколом; docs/README.md аннотации обновлены
This commit is contained in:
@@ -11,6 +11,33 @@
|
||||
|
||||
---
|
||||
|
||||
## QuickSave
|
||||
|
||||
<a id="qsave"></a>
|
||||
### QSAVE. QuickSave / QuickLoad — **РЕАЛИЗОВАНО И ПРОВЕРЕНО 2026-08-22** (коммит f4b4852, тэг v0.6-pop-quicksave)
|
||||
|
||||
F6/F9 в roomtest. Формат снимка `'POPQ'` v3: заголовок
|
||||
{P,O,P,Q,ver=3,level,reserved}, payload всех игровых переменных (Kid/Guard
|
||||
через qs_char, HP, fight seed, читы speed/immortal/sound с range-валидацией
|
||||
на загрузке), хвост = размер payload + XOR-контрольная сумма (старший байт =
|
||||
инвертированный XOR). Носитель — файл на HDD: транзакционная запись
|
||||
`unlink POP.NEW → bank_save_file → rename SAV→BAK → rename NEW→SAV`
|
||||
с откатом; загрузка пробует POP.SAV, потом POP.BAK; при другом уровне —
|
||||
`pop_next_level+pop_level_switch`. Сериализация через резидентные W0-примитивы
|
||||
`pop_qs_*` (паттерн request-flag + `pop_qsave_process()` на границе кадра вне
|
||||
Char-окон); сериализаторы добавлены в pop_map/pop_loose_mob/pop_trob/
|
||||
pop_guard_ai с восстановлением инвариантов (mobs_live, trob_drawn, redraw).
|
||||
Дабл-буфер закрыт `pop_qsave_restore_room()`: полная перезагрузка комнаты +
|
||||
перерисовка ОБЕИХ страниц + инвалидация кэшей спрайтов и HP. Три ГСЧ
|
||||
(`pop_t_seed`, `trob_seed`, `pop_fight_seed`) — все в payload.
|
||||
Файловое I/O — новые `bank_load_file`/`bank_save_file` libc (без правила W3).
|
||||
|
||||
Критерий приёмки выполнен: сохранить, выйти по ESC, запустить заново,
|
||||
загрузить — оказались там же; проверено в MAME. Полный разбор и формат —
|
||||
[`../docs/quicksave_plan.md`](../docs/quicksave_plan.md) (теперь справочник).
|
||||
|
||||
---
|
||||
|
||||
## Уровни: спецсобытия
|
||||
|
||||
<a id="l8-mouse"></a>
|
||||
|
||||
@@ -1090,37 +1090,12 @@ SPIKE-BAKED, а до того — мерцание плиты, ради кото
|
||||
раскладки в `tests-host/README.md`).
|
||||
|
||||
|
||||
### <a id="qsave"></a>QSAVE. QuickSave / QuickLoad
|
||||
### <a id="qsave"></a>QSAVE. QuickSave / QuickLoad — ЗАКРЫТА 2026-08-22
|
||||
|
||||
> **План целиком — [`../docs/quicksave_plan.md`](../docs/quicksave_plan.md)**
|
||||
> (разбор SDLPoP, инвентаризация нашего состояния, формат снимка, порядок
|
||||
> восстановления, разбиение на шаги QS1…QS6, риски). Изучено 2026-08-17,
|
||||
> **код не начат.**
|
||||
|
||||
Оговорка, с которой начинается план: **в оригинале 1989 года этого нет
|
||||
вовсе**, QuickSave — enhancement SDLPoP (`seg000.c`, `USE_QUICKSAVE`,
|
||||
F6/F9). Значит повторяем не букву, а устройство.
|
||||
|
||||
Что взять у SDLPoP без изменений: снимок — плоский список полей, один обход
|
||||
на запись и на чтение (`#define process(x)`), совместимость держится
|
||||
строкой версии и ничем больше; клавиша только взводит флаг, работа идёт
|
||||
**между кадрами**; состояние ОТРИСОВКИ не сохраняется вовсе — комната
|
||||
перерисовывается с нуля.
|
||||
|
||||
Чем наш случай тяжелее: уровень лежит в EMM-странице, а не в ОЗУ;
|
||||
`room_modif`/`trobs` — `static` в банковом `pop_trob.c` (нужны
|
||||
сериализаторы); ГСЧ у нас **три** (`pop_t_seed`, `trob_seed`,
|
||||
`pop_fight_seed`), и пропуск любого даст «загрузилось, но играется иначе»;
|
||||
и главное — **дабл-буфер**: перерисовать после загрузки надо ОБЕ страницы,
|
||||
иначе старая картинка мигнёт через кадр.
|
||||
|
||||
Носитель — **файл** (`QUICKSAVE.SAV`, ≈1,9 КБ), EMM-страница отвергнута:
|
||||
она не переживает рестарт программы, а именно рестарт — тот случай, ради
|
||||
которого QuickSave и нужен (сцену каскада на 13/23 воспроизводит только
|
||||
`ESC` → запуск заново). Мгновенный EMM-слот остаётся необязательным QS6.
|
||||
|
||||
**Критерий приёмки:** сохранить, выйти по `ESC`, запустить roomtest заново,
|
||||
загрузить — и оказаться там же.
|
||||
**Закрыта** (F6/F9, POP.SAV + POP.BAK, коммит f4b4852, тэг v0.6-pop-quicksave).
|
||||
Протокол и устройство — [`TASKS_CLOSED.md`](TASKS_CLOSED.md#qsave);
|
||||
формат снимка и разбор SDLPoP —
|
||||
[`../docs/quicksave_plan.md`](../docs/quicksave_plan.md).
|
||||
|
||||
### <a id="l1-speed"></a>L1-SPEED. Игра идёт быстрее оригинала (найдено 2026-08-01) — ЗАКРЫТА 2026-08-19
|
||||
|
||||
|
||||
Reference in New Issue
Block a user