План 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:
@@ -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` тиков на
|
||||
|
||||
Reference in New Issue
Block a user