Files
Sprinter-SDCC/applications/PoP/roomtest/NEXT_SESSION.md
T
snark13 096517d8aa MIRROR-FG-STALE закрыт как НЕ БАГ (проверено пользователем)
Прогон читом ROOMNAV: телепорт в комнату 4 сразу после нажатия кнопки —
зеркала нет вовсе (тайл ставится в момент, когда дверь ДОРИСОВАЛА открытие,
43 тика анимации, телепорт успевает раньше); обычный вход в комнату —
зеркало на месте и непроходимо, кроме правильного прыжка, то есть коллизия
его видит.  Сценария «постановка при игроке в комнате» в реальном
прохождении нет: дверь выхода стоит не в комнате зеркала, а при входе
комната и снимок room_fg берутся из данных уровня разом.

Решение пользователя: телепорт по комнатам — отладочный режим, чинить нечего.
Запись целиком уехала в BUGS_CLOSED.md вместе с протоколом и с указанием, чем
лечить, если симптом всё же всплывёт на моде/уровне, где кнопка и зеркало в
одной комнате.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 16:22:04 +03:00

8.3 KiB
Raw Blame History

Точка входа для следующей сессии (обновлено 2026-08-11)

Файл для старта с чистого контекста: где всё стоит, что делать первым, какие грабли уже собраны. Читать целиком — он короткий. Дальше по ссылкам: TASKS_OPEN.md (доска), BUGS_OPEN.md (открытые баги), CLAUDE.md.


1. СЛЕДУЮЩАЯ ЗАДАЧА: L5-SHADOW — уровень 5

Уровни 1-4 приняты smoke-тестами; полные обходы всех комнат делаются по готовности ВСЕХ уровней (политика приёмок, решение пользователя 2026-08-11) — отдельных L3-PASS/L4-PASS больше нет.

Уровень 5 не приносит ни одного нового тайла (инвентарь res2005.bin сверен: всё уже есть с уровней 1-4). Вся работа — одно спецсобытие: тень появляется в комнате 24, ждёт открытия двери, идёт к зелью, выпивает его и уходит за левый край; боя нет. Писать: do_auto_moves + таблица shad_drink_move, do_init_shad, ветку check_shadow для уровня 5, autocontrol_shadow_level5, плюс ветку ТЕНИ в check_guard_fallout. Всё расписано по SDLPoP прямо в задаче, включая готовые константы.

Опора: механизм «спецсобытие порождает персонажа в слоте соперника» уже отработан на скелете (pop_check_skel), а сама тень как charid_1_shadow заведена на уровне 4.

2. Состояние репозитория

Всё закоммичено, main чист. tests-host: 5 наборов проходят ([char] 65, [geom] 3144, [grab] 53, [phys] 1723, [wall] 1). make size-check: OK (65 программ, роста нет).

Коммиты 2026-08-11:

хеш что
a823e7e libbgi: блочные AND/OR/XOR акселератора (строками и колонками)
860468f libbgi: NOT_PUT тоже через акселератор + docs/shadow_render.md
c0075c7 NEXT_SESSION: op-блиты сделаны, вид тени отложен

Накануне (2026-08-10) закрыт L4-MIRROR: шаги 1-5 + фикс fore-прохода над отражением; протокол — TASKS_CLOSED.md.

3. Состояние окружения

  • MAME запущена с мостом, но на её HDD сейчас лежат ТЕСТЫ libbgi (accop.exe, bgiimg.exe), а не roomtest. Под roomtest пересобрать образ: make hdd (или make PROF_FLAGS="-DFIRST_LEVEL=5" hdd — при смене FIRST_LEVEL нужен touch roomtest.c, иначе не переедет), после чего MAME обязана пройти полный рестарт (memory mame_hdd_rebuild_restart).
  • Остановка MAME — mame/v306/bridge_cmd.sh 'cmd exit', НЕ kill (правило пользователя). pkill -f бывает не срабатывает, и остаются ДВА инстанса, оба отвечающих на файловый IPC — тогда скриншоты приходят от чужой машины. Проверять pgrep -f mame.arm после остановки.
  • Прогон без MCP-инструментов: bridge_cmd.sh 'cont' → sleep ~45 с (бут DSS) → bridge_cmd.sh 'keyseq d:{ENTER}'keyseq <имя>{ENTER}snap /tmp/mame_snap/x.png. Имя .exe на образе — не длиннее 8 символов (FAT 8.3) и БЕЗ подчёркивания (keyseq не умеет _).
  • 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-BUTTONdied_on_button (seg007:776) не портирован.
  • TORCH-ANIM-RIGHT — под запечённым пламенем могут застыть пики/меч/зелье справа от факела; на уровнях 1-4 такого соседства нет.
  • GUARD-PHYS — остаток: ветка тени в check_guard_fallout (уходит в L5-SHADOW) и живая проверка стража, нажимающего напольную кнопку.
  • Долгие: BUG-SPIKE-1, BUG-CHOMP-JUMP-1 (оба низкий приоритет), L3-COLOR, L1-SPEED (игра на ~39 % быстрее оригинала), TUNE-1.

6. Грабли, собранные 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/5 L4-MIRROR значились несделанными). Перед планированием — сверять TASKS_OPEN.md с кодом грепом, а не верить записи.
  • Диапазон obj_x = 416..695 (посчитан из kid_data.bin). Пригодится всякий раз, когда нужна таблица по экранной X.