План QuickSave/QuickLoad: разбор SDLPoP + инвентаризация нашего состояния

Только изучение и план, кода нет.

Первое, что выяснилось: в оригинале 1989 года быстрого сохранения НЕТ
вовсе — это enhancement SDLPoP (seg000.c, USE_QUICKSAVE, F6/F9).  Значит
искать в Apple II / MSDOS нечего, и повторяем мы не букву, а устройство.

Что берём у SDLPoP: плоский снимок с ОДНИМ обходом на запись и на чтение
(#define process(x)); совместимость держится строкой версии и ничем больше;
клавиша только взводит флаг, работа идёт между кадрами; состояние отрисовки
не сохраняется вовсе — комната перерисовывается с нуля.

Чем наш случай тяжелее: уровень в EMM-странице, room_modif/trobs — static в
банковом pop_trob.c, ГСЧ у нас ТРИ (pop_t_seed, trob_seed, pop_fight_seed),
и дабл-буфер требует перерисовать после загрузки ОБЕ страницы.

Снимок ≈1,9 КБ, поэтому основной носитель — EMM-страница (мгновенно, мимо
DSS и его лимита манипуляторов), файл вынесен в необязательный шаг QS6.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-17 22:56:27 +03:00
parent f44663040c
commit 78b93a6b5e
3 changed files with 325 additions and 0 deletions
+28
View File
@@ -864,6 +864,34 @@ tp/10 у факелов таблицей, пустой слот соперник
## P1 — берётся в любой момент
### <a id="qsave"></a>QSAVE. QuickSave / QuickLoad
> **План целиком — [`../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`), и пропуск любого даст «загрузилось, но играется иначе»;
и главное — **дабл-буфер**: перерисовать после загрузки надо ОБЕ страницы,
иначе старая картинка мигнёт через кадр.
Размер снимка ≈ 1,9 КБ, поэтому основной носитель — **EMM-страница**
(мгновенно, без DSS и его лимита манипуляторов), файл — опциональный
шаг QS6.
### <a id="l1-speed"></a>L1-SPEED. Игра идёт быстрее оригинала (найдено 2026-08-01)
Сверка таймингов: оригинал — `BASE_FPS = 60` при `base_speed = 5` тиков на