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

111 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Точка входа для следующей сессии (обновлено 2026-08-11)
Файл для старта с чистого контекста: где всё стоит, что делать первым, какие
грабли уже собраны. Читать целиком — он короткий. Дальше по ссылкам:
`TASKS_OPEN.md` (доска), `BUGS_OPEN.md` (открытые баги), `CLAUDE.md`.
---
## 1. СЛЕДУЮЩАЯ ЗАДАЧА: [L5-SHADOW](TASKS_OPEN.md#l5-shadow) — уровень 5
Уровни 1-4 приняты **smoke-тестами**; полные обходы всех комнат делаются по
готовности ВСЕХ уровней ([политика приёмок](TASKS_CLOSED.md#pass-policy),
решение пользователя 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`](TASKS_CLOSED.md#l4-mirror).
## 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`](../docs/shadow_render.md).
## 5. Остальное открытое
- **[FORE-DUP](BUGS_OPEN.md#fore-dup)** — передний слой тайла рисуется дважды
при перекрытии объектов (Кид+отражение всегда, Кид+соперник — весь ближний
бой). Картинку не портит, тратит такты. **Сначала замерить, потом
чинить** — окно клипа в своё время дало 3.2×.
- **[DIED-ON-BUTTON](BUGS_OPEN.md#died-on-button)** — `died_on_button`
(seg007:776) не портирован.
- **TORCH-ANIM-RIGHT** — под запечённым пламенем могут застыть пики/меч/зелье
справа от факела; на уровнях 1-4 такого соседства нет.
- **[GUARD-PHYS](TASKS_OPEN.md#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.