5348feb5f4
Доска отставала от кода на три задачи — планировать по ней было нельзя. Сверка проведена грепом по исходникам, а не по записям: - L4-MIRROR ЗАКРЫТА: шаги 1-5 сделаны и проверены пользователем в MAME (зеркало в атласе, постановка тайла, отражение, прыжок сквозь зеркало с рождением тени, левый клип тени). Протокол с разбором решений — в архиве; - L3-CHOMP и L3-SKEL закрыты ещё 2026-08-08/07 (коммитыdc0bd47,4d4323f,db4106a,1461ed5), на доске значились как предстоящие; - тайлсет palace (шаг 2 levels_plan) в коде есть целиком — pop_bg_load(type), pal_*.atl, дворцовый wall_pattern, решётки 25-29 и в tile_table, и в коллизии (tile_is_floor совпадает с seg006:0628); - в GUARD-PHYS остаток пересобран по факту: check_chomped_guard сделан, скелет в check_guard_fallout сделан, ветки ТЕНИ нет — она уехала в L5-SHADOW. Приёмки: по решению пользователя уровни 1-4 приняты SMOKE-тестами, полные обходы всех комнат делаются по готовности ВСЕХ уровней — L3-PASS/L4-PASS как отдельные задачи отменены, вместо них политика приёмок в архиве. Новая цель — уровень 5. Инвентарь res2005.bin: НИ ОДНОГО нового тайла, всё портировано на уровнях 1-4. Единственная новая механика — спецсобытие «тень крадёт зелье» (комната 24): заведена задача L5-SHADOW с портом по SDLPoP (check_shadow / do_init_shad / do_auto_moves + shad_drink_move / autocontrol_shadow_level5 + ветка тени в check_guard_fallout), включая готовые константы и то, что у нас уже есть под это. Заведён MIRROR-FG-STALE (низкий): place_mirror пишет тайл в данные уровня, но не в снимок room_fg, по которому работает коллизия — если зеркало поставлено, пока игрок В комнате 4, оно невидимо для коллизии (тень не родится). В обычном прохождении недостижимо: дверь выхода в другой комнате. Записан точный сценарий воспроизведения читом ROOMNAV и фикс на несколько строк. Правило «в _OPEN только незакрытое» теперь выполняется буквально: - bug_list.md → BUGS_OPEN.md, bug_closed.md → BUGS_CLOSED.md (ссылки обновлены во всех документах и в комментарии pop_trob.c); - из TASKS_OPEN убраны блоки закрытых задач (L3-CHOMP, L3-SKEL, L3-PASS, L4-MIRROR, DRAW-CHAR), справка по связности комнат уехала в архив; - из BUGS_OPEN убраны 8 строк таблицы закрытых багов, закрытый T-2 (уехал в BUGS_CLOSED) и раздел «уровень 3 — неначатые задачи» (обе записи закрыты); сводная таблица пересобрана по реально открытым записям. Все внутренние ссылки проверены скриптом: битых якорей 0. make size-check OK (65 программ), tests-host 5/5. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
58 lines
3.8 KiB
Markdown
58 lines
3.8 KiB
Markdown
# roomtest
|
||
|
||
Живой прототип порта Prince of Persia: комната 1 уровня 1 отрисовывается
|
||
реальной композицией слоёв-тайлов, по ней бегает и прыгает Kid под
|
||
управлением с клавиатуры. Служит стендом для переноса механик движка
|
||
(анимация, коллизия, падение, зацеп, окклюзия, проваливающиеся полы) до их
|
||
выделения в переиспользуемый код.
|
||
|
||
Правила разработки и порядок слоёв рендера — [`CLAUDE.md`](CLAUDE.md).
|
||
|
||
## Быстрый старт
|
||
|
||
```
|
||
make # собрать roomtest.exe (ассеты упакуются автоматически)
|
||
make run # собрать, упаковать на дискету и запустить в MAME
|
||
```
|
||
|
||
Клавиши в запущенном тесте: ←/→ бег, ↓ присед, ↑+→ прыжок, Shift шаг,
|
||
ESC выход.
|
||
|
||
**Отладка рисования:**
|
||
- **SPACE** — тумблер дабл-буфера (в однобуфере баги рисования видны без
|
||
мерцания-через-кадр).
|
||
- **1** — заморозить кадр (`frozen`: tick/draw/flip пропускаются, картинка
|
||
стоит), **2** — снять заморозку и продолжить. Приём для разбора
|
||
транзиентных артефактов (тряска/падение loose, поза Kid): поймать
|
||
проблемный кадр на `1`, спокойно рассмотреть/снять пиксели — в т.ч.
|
||
удалённо из MAME MCP-моста, пока анимация стоит.
|
||
|
||
Эталон вида комнаты — `../toolchain/1.1-2.png`.
|
||
|
||
## Модули
|
||
|
||
- `roomtest.c` — главный цикл (дабл-буфер, порядок tick/draw).
|
||
- `pop_bg.c` — фон комнаты композицией тайлов + fore-окклюзия + loose-полы.
|
||
- `pop_kid.c` — анимация/движение Kid (интерпретатор seqtbl).
|
||
- `pop_ctrl.c` — управление с клавиатуры (диспетчер control).
|
||
- `pop_map.c` — коллизия с картой, физика падения, loose-полы.
|
||
- `room1_data.h` — карта комнаты 1; `kid_data.h` — данные анимации Kid
|
||
(оба генерируются скриптами `../toolchain/`).
|
||
|
||
## Статус (2026-08-07)
|
||
|
||
**Уровни 1 и 2 приняты** (пользователь прошёл все комнаты обоих, крупных
|
||
багов нет): комнаты и переходы, Kid (анимация, управление, коллизия/падение,
|
||
зацеп/подтягивание/спуск, окклюзия), кнопки и ворота, пики, проваливающиеся
|
||
полы, дверь уровня и переход на следующий уровень, меч и бой, стражи с ИИ,
|
||
HP и зелья, чекпойнт уровня 3.
|
||
|
||
Уровень 3 играется, но не принят: нет **чомперов** и **скелета**. Не сделано
|
||
вовсе: звук, таймер/HUD времени, меню и сохранения.
|
||
|
||
**Что берём в работу сейчас — [`TASKS_OPEN.md`](TASKS_OPEN.md)** (сделанное с
|
||
протоколами замеров — [`TASKS_CLOSED.md`](TASKS_CLOSED.md)); открытые баги —
|
||
[`BUGS_OPEN.md`](BUGS_OPEN.md), закрытые с разбором корней —
|
||
[`BUGS_CLOSED.md`](BUGS_CLOSED.md); план следующих уровней —
|
||
[`../docs/levels_plan.md`](../docs/levels_plan.md).
|