L3-CHKP, зацеп в прыжке опцией, pop_tune.h; сборка 10 мин -> 1:48
L3-CHKP (чекпойнт уровня 3). Флаг взводится, когда Кид уходит ВЛЕВО ИЗ комнаты 7, а do_startpos по нему подменяет старт на комнату 2, тайл (0,6), лицом влево и снимает loose-плиту (7,0,4). Тонкость, на которой я сначала ошибся: level3_set_chkp (seg002:0665) вызван из leave_room ДО goto_other_room, поэтому `Char.room == 7` — это комната, ИЗ которой уходят, а не в которую входят. Поймал пользователь прогоном в SDLPoP: смерть В комнате 7 вернула его в стартовую 9, а плита осталась цела. Проверено в MAME: вход в 7 флаг не ставит, уход влево — ставит; респавн в комнате 2; после обычной смерти (без чекпойнта) плиты восстанавливаются как раньше. Зацеп ПРЯМО В ПРЫЖКЕ (check_grab_run_jump, seg006:1228) — портирован за выключателем POP_ENABLE_JUMP_GRAB. Это НЕ ваниль: в оригинале зацепиться можно только в начале падения (кадры 102..105), то есть Shift приходится жать уже в полёте; у SDLPoP это enable_jump_grab, и работает он лишь при включённых fixes-and-enhancements. Три точки вызова как у оригинала: check_action и обе ветки check_bumped (зацеп за верх стены вместо удара). pop_tune.h — настраиваемые константы в одном месте (аналог custom_options_type SDLPoP): чекпойнт, выключатель зацепа и отладочная крутилка POP_DBG_GATE_HOLD (сколько кадров решётка держится поднятой; оригинал 5, потолок 30 — таймер связи пятибитный, 31 = «заклинено»). Задача TUNE-1 в TASKS.md: читать это из ini рядом с exe. СБОРКА. --max-allocs-per-node снижен со 100000 (дефолт sprinter-cc) до 3000 (дефолт SDCC) через `make ALLOCS=...`, а pop_trob.c уехал в БАНК 6 — на 3000 резидент иначе не влезает (замер: конец _HOME 0xBC69 при стеке с 0xBB00). Итог: сборка с нуля 1:48 вместо >10 минут, куча 2751 Б вместо 2298. Релизная сборка — make ALLOCS=100000; сравнивать занятость банков можно только при одинаковом ALLOCS. Отдельно (вне git, SDLPoP в .gitignore): из референса вычищена вся наша отладка DBG-GRAB — трасса JMP, GRAB try/probe/fail/OK/skip, автоскриншоты seg003, печати DBG mob/mid/overlay/kidobj и счётчик dbg_shots. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -44,6 +44,7 @@
|
||||
| 4 | [L3-CHKP](#l3-chkp) | чекпойнт ур. 3 | корректный респавн ур. 3 |
|
||||
| — | [L1-SPEED](#l1-speed) | игра на ~39 % быстрее оригинала | ощущение от ВСЕХ уровней; берётся в любой момент |
|
||||
| — | [L1-PASS](#l1-pass) | сквозной прогон ур. 1 + таблица 24 комнат | приёмка ур. 1 |
|
||||
| — | [TUNE-1](#tune-1) | параметры движка → cfg-файл (сейчас `pop_tune.h`) | отладка таймингов и моды; берётся по мере надобности |
|
||||
| ✔ | [DBG-CHEATS](#dbg-cheats) | `[`/`]` — подгонка Кида по X | **СДЕЛАНО 2026-08-05** |
|
||||
| ✔ | [MEM-BANK5](#mem-bank5) | `pop_ctrl.c` → банк 5 | **СДЕЛАНО 2026-08-05**: куча 180 Б → 2298 Б |
|
||||
|
||||
@@ -197,6 +198,34 @@ loose-плиту (комната 7, колонка 4, ряд 0). Механик
|
||||
есть (сделана в L2), остаётся сам флаг и подмена старта.
|
||||
|
||||
|
||||
### <a id="tune-1"></a>TUNE-1. Параметры движка — в конфиг, а не в код
|
||||
|
||||
**Что уже есть.** `pop_tune.h` — все настраиваемые числа собраны в одном
|
||||
заголовке: чекпойнт уровня 3 (`POP_CHKP_*`), отладочное окно решётки
|
||||
(`POP_DBG_GATE_HOLD`), включатель зацепа в прыжке (`POP_ENABLE_JUMP_GRAB`).
|
||||
Правило уже действует: новое «особое событие» или тайминг заводится ТАМ, а
|
||||
не константой по месту.
|
||||
|
||||
**Что нужно сделать.** Читать их из ФАЙЛА рядом с exe, чтобы менять без
|
||||
пересборки — под отладку («растянуть решётку, чтобы успеть пройти») и под
|
||||
моды. Формат: простой ini/`ключ=значение`, парсер на ~50 строк (числа,
|
||||
комментарии `;`, неизвестные ключи игнорировать), файл необязателен —
|
||||
нет файла, значит зашитые дефолты. Секции по смыслу: `[level]`,
|
||||
`[debug]`, `[enhancements]`.
|
||||
|
||||
**Ориентир — SDLPoP.** У него это `custom_options_type` (types.h) +
|
||||
`SDLPoP.ini` + меню Settings/Mods; наши имена намеренно совпадают с его
|
||||
(`custom->имя`), чтобы сверка оставалась механической. Осмотр его меню и
|
||||
опций — часть задачи: у него уже разложены по группам стартовые
|
||||
HP/минуты, номера «особых» комнат и уровней (шадоу, скелет, зеркало,
|
||||
чекпойнт), тайминги ворот и пик, скорости, а отдельной группой —
|
||||
`fixes`/`enhancements` (включая `enable_jump_grab`, который мы уже
|
||||
портировали). Брать всё подряд не надо: переносим по мере того, как
|
||||
константа реально понадобилась в игре.
|
||||
|
||||
**Оговорка по памяти.** Парсер и таблица параметров — холодный код,
|
||||
исполняется один раз при старте: кандидат в банк, а не в резидент W1.
|
||||
|
||||
### KBD-1. Shift + стрелки: нажатия теряются — **ПРИЧИНА НАЙДЕНА, ФИКС ПРОВЕРЕН**
|
||||
|
||||
> **ПОПРАВКА К ПОСЫЛКЕ (2026-08-05).** Ниже «fake shift» подан как
|
||||
|
||||
Reference in New Issue
Block a user