Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
12 KiB
Точка входа для следующей сессии (обновлено 2026-08-12)
Файл для старта с чистого контекста: где всё стоит, что делать первым, какие
грабли уже собраны. Читать целиком — он короткий. Дальше по ссылкам:
TASKS_OPEN.md (доска), BUGS_OPEN.md (открытые баги), CLAUDE.md.
1. СЛЕДУЮЩАЯ ЗАДАЧА: живая проверка зелий в MAME
Код зелья медленного падения НАПИСАН (все шесть шагов плана
TASKS_OPEN.md#l7-feather) и закрыт хост-тестом,
но в MAME ещё не смотрелся. Проверить две сцены:
- уровень 7, комната 1 — зелье пера: зелёные пузырьки, зелёная вспышка при питье, спуск в шахту заметно медленнее обычного и без урона;
- уровень 2, комната 13, тайл (1,3) — зелье «−HP»: пузырьки СИНИЕ (были красные — цвет по типу зелья не был портирован вовсе), HP убавляется на единицу, экран краснеет ровно один раз.
Заодно попадают под проверку pop_flash_color (жёлтый/красный/зелёный) и
атлас pop_pot (23 → 37 спрайтов: добавлены зелёный и синий наборы кадров
пузырька).
Зацеп в падении — закрыт 2026-08-12
(GRAB-BELOW-ROOM). Оказалось, что зацеп
из падения был жив, а сломан был спуск через НИЖНЮЮ кромку комнаты (уровень 7,
комната 14): do_fall не пускал ряд персонажа до 3, и check_grab на этом
отрезке не звался ни разу. Плюс восстановлена ветка ACT_MIDAIR (кадры
102..105 — начало падения). Проверено хост-тестом t_grab и живьём в MAME.
Осталась ощущенческая часть — GRAB-KBD-TIMING:
зацеп при входе на уровень 7 срабатывает менее стабильно, чем в оригинале
(подозрение на клавиатурный модуль и на общий темп игры, L1-SPEED).
Решение пользователя: разбирать после того, как будут готовы все уровни.
2. Состояние репозитория
Всё закоммичено, main чист. tests-host: 5 наборов проходят
([char] 65, [geom] 3144, [grab] 55, [phys] 1727, [wall] 1).
make size-check: OK (65 программ, роста нет).
Коммиты 2026-08-12:
| хеш | что |
|---|---|
b5951c9 |
зацеп за кромку нижнего ряда: do_fall пускает ряд до 3 + check_grab в midair |
d7d18ae |
зелье медленного падения (перо) + цвет пузырьков по типу зелья |
Раньше (2026-08-11, вечер): abe4a83 уровень 5, 740cc6d арка у ворот,
e4ef489 L6-SHADOW, 9ecea17 уровень 6 → 7.
Уровни 1-6 проходятся.
3. Состояние окружения
- MAME запущена с мостом, на HDD — roomtest, собранный с
-DFIRST_LEVEL=7. Пересобрать образ:make hdd(илиmake PROF_FLAGS="-DPROF_BORDER=1 -DFIRST_LEVEL=N" hdd— при сменеFIRST_LEVELнуженtouch roomtest.c, иначе не переедет), после чего MAME обязана пройти полный рестарт (memorymame_hdd_rebuild_restart). - Остановка MAME —
mame/v306/bridge_cmd.sh 'cmd exit', НЕkill(правило пользователя).pkill -fбывает не срабатывает, и остаются ДВА инстанса, оба отвечающих на файловый IPC — тогда скриншоты приходят от чужой машины. Проверятьpgrep -f mame.armпосле остановки. - Прогон без MCP-инструментов: запустить
run_bridge.sh→ sleep 6 →bridge_cmd.sh 'cont'→ sleep 8 →keyseq d:{ENTER}→keyseq roomtest{ENTER}→snap <путь>.png. Тайминги — правило пользователя, длиннее ставить не надо. Имя .exe на образе — не длиннее 8 символов (FAT 8.3) и БЕЗ подчёркивания (keyseqне умеет_). - Вести игру из моста — по обратной связи из памяти, а не по скриншотам:
mem 0xA46A 10=pop_char_tКида,mem 0xA3F7 1= номер комнаты (адреса из.sprinter-cc-roomtest/roomtest.map+.sym). Полный рецепт (удержания, чит-навигация, тайминги нажатий) — memorymame_mcp_bridge. - MCP-инструменты
mame-z80не поднимались: сервер падал наModuleNotFoundError: mcp.server.fastmcp— вышелmcp2.0, где FastMCP переехал. В~/.claude.jsonзафиксировано--with "mcp<2"; подхватится при следующем СТАРТЕ сессии Claude (внутри текущей — нет). - SDLPoP собран с отладочной информацией (
-O0 -g3); pkg-config на машине нет, команда сборки — в истории этого файла (git log -p). - НЕ ПРИБРАНО: в
SDLPoP/src/seg008.cдиагностическийfprintfс меткойDBGMIRRORв началеadd_objtable(гейтится поobj_type == 1 || == 4).
4. Что сделано в libbgi и чем это полезно дальше
Блочные операции акселератора — полный набор AND/OR/XOR/NOT, строками и
колонками: gfx_blit_op / gfx_blit_part_op, gfx_blit_cols_op /
gfx_blit_cols_part_wx_op (клип-окно и флип — как у копирующих близнецов),
опкод патчится SMC. putimage лишился попиксельного пути целиком (закрыт
пункт 2d-1 docs/TODO.md). Регресс — tests/accop (10/10 PASS в MAME,
побайтно). Механика и три ловушки — memory accel_block_ops; главные:
операция читает ОЗУ-КОПИЮ экрана (не VRAM), а прозрачность #FF совместима
с AND/OR, но не с XOR.
Вид тени (OR+XOR) отложен до готовности всех уровней — разбор, замеры и
варианты в ../docs/shadow_render.md.
5. Остальное открытое
- FORE-DUP — передний слой тайла рисуется дважды при перекрытии объектов (Кид+отражение всегда, Кид+соперник — весь ближний бой). Картинку не портит, тратит такты. Сначала замерить, потом чинить — окно клипа в своё время дало 3.2×.
- DIED-ON-BUTTON —
died_on_button(seg007:776) не портирован. - TORCH-ANIM-RIGHT — под запечённым пламенем могут застыть пики/меч/зелье справа от факела; на уровнях 1-4 такого соседства нет.
- GUARD-PHYS ЗАКРЫТ 2026-08-11: нажатие напольной кнопки НЕ-Кидом
проверено живьём на уровне 6 (тень встаёт на
closerи роняет решётку). - GATE-FORE-KID — Кид в проёме ворот виден поверх решётки; портирован только шовный случай.
- Долгие:
BUG-SPIKE-1,BUG-CHOMP-JUMP-1(оба низкий приоритет),L3-COLOR,L1-SPEED(игра на ~39 % быстрее оригинала),TUNE-1.
6. Грабли, собранные 2026-08-12
- Тест, который «проходит» и на сломанном коде, ничего не стоит. Первая версия регресса на спуск-зацеп засчитывала ЛЮБОЙ вис — а Кид на первых кадрах падения цепляется обратно за ту же верхнюю кромку. Признак цели обязан быть позиционным. Проверять новый регресс откатом фикса — обязательно.
action == 3(midair) — это не только падение: кадры спускаseq_68тоже идут с ним. Ждать «начала падения» по одномуactionнельзя.- Клавиши, зажатые из моста, переживают точечный
release: плагин переустанавливает удержания каждый кадр, и после серииholdосталось 6 незакрытых входов — у пользователя «Кид ходит как с зажатым Shift». Заканчивать работу с вводом толькоpause+cont(release_all). - Чит-навигация
+/−теряет нажатия и роняет Кида из комнат без пола: уровень 7 из комнаты 17 всегда сваливается в 1, и кольцо−до комнаты 14 не доходит никогда. Ходить циклом с проверкой номера комнаты.
Грабли 2026-08-10/11
- Не оценивать железо по своей же memory-заметке. Заявил, что accel
умеет только копирование и XOR потребует ~25 % кадра на CPU — неверно,
поправил пользователь. Заметка описывала копирование, я принял её
неполноту за свойство железа. Проверять по драйверу MAME
(
mame/sources/MAME/src/mame/sinclair/sprinter.cpp) иdocs/new/06-accel.md. - lldb через FIFO — плохая идея. Повторяющиеся
-oприbreakpoint command addзаписываются НЕПОЛНЫМИ. Работает надёжно:fprintf(stderr, ...)прямо в SDLPoP, пересборка (секунды) и чтение stdout. makeбезhddне обновляет образ MAME, аFIRST_LEVELживёт вroomtest.c— при смене нуженtouch roomtest.c.- Доска отставала от кода на три задачи (
L3-CHOMP,L3-SKEL, шаги 3/5L4-MIRRORзначились несделанными). Перед планированием — сверятьTASKS_OPEN.mdс кодом грепом, а не верить записи. - Диапазон
obj_x= −416..695 (посчитан изkid_data.bin). Пригодится всякий раз, когда нужна таблица по экранной X.