Приёмка ур. 2–3: сквозь стену, клин в шве, бар под плитой, глухой страж
Четыре разбора с прогонов пользователя; три бага закрыты, четвёртый (BUG-SPIKE-1, пики) заведён с замером и гипотезой. BUG-JUMPWALL-1 (Critical) — недолетевший прыжок проходил СКВОЗЬ стену. check_collisions держал флаги перекрытия ОДНОГО ряда, а оригинал (seg004:0004) — трёх, и move_coll_to_prev (seg004:00DF) берёт «прошлые» флаги из нужного. Наш prev=3 («уже перекрывал») подавлял бамп ровно на кадре смены ряда, а в падении ряд меняется почти каждый кадр — переход 0→1 на стене приходился как раз на него. Порт трёх рядов дословно. Воспроизведено и закрыто на харнессе (новый набор t_wall: свип по 20 стартовым X, 4 давали проход сквозь кладку); 1723 трассы t_phys НЕ изменились — правка поведение-сохраняющая. Живьём подтвердил пользователь. BUG-GUARD-DEAF-1 (Major) — is_guard_notice не взводился НИГДЕ, поэтому неактивный страж не оборачивался на Кида за спиной никогда. Портированы все пять мест оригинала: опкод SOUND в play_seq (звуки 0..2), bumped_sound, мягкое/среднее приземление, обрушенная плита, щелчок кнопки. Ждёт игровой проверки боем в комнате 11 уровня 2. BUG-SEAM-WEDGE-1 — клин кладки в пустом (2,0). Сосед угла снизу-слева лежит в комнате по диагонали (room_BL); мы безусловно считали его стеной, оригинал (load_rowbelow, seg008:368) — только когда такой комнаты нет. Ряд «снизу» стал 11-байтным: [10] = тайл (0,9) диагональной комнаты. BUG-LOOSE-3 — чёрный бар под упавшей плитой-потолком. pop_ceil_bake_empty стирал полосу и восстанавливал только два тайла ряда −1, а в полосу лезет графика соседа слева и верхушки ряда 0. Теперь перерисовываются ряды −1 и 0, колонки col−1..col+1. Проверено попиксельной сверкой с эталонной перерисовкой: 0 различий. Плюс карта связности комнат уровней 1–3 (TASKS.md): на ур. 2 недостижимых нет, на ур. 3 это 23 и 24 — те же односторонние ссылки, что дали 13/18/24 на уровне 1, только комнаты полностью пустые. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -51,7 +51,12 @@
|
||||
|
||||
## P0 — делаем сейчас
|
||||
|
||||
### <a id="l2-pass"></a>L2-PASS. Приёмка уровня 2
|
||||
### <a id="l2-pass"></a>L2-PASS. Приёмка уровня 2 — **SMOKE ПРОЙДЕН 2026-08-05**
|
||||
|
||||
> **Прогон 2026-08-05 (пользователь): уровень 2 пройден.** Полная приёмка по
|
||||
> всем комнатам — позже; из smoke пришли [BUG-LOOSE-3](bug_list.md#bug-loose-3)
|
||||
> и [BUG-GUARD-DEAF-1](bug_list.md#bug-guard-deaf-1). Следом прогнан smoke
|
||||
> уровня 3 — его наблюдения в [разделе «Уровень 3»](bug_list.md#уровень-3).
|
||||
|
||||
Баги отрисовки уровня 2 пользователь подаёт списком отдельно — они идут в
|
||||
[`bug_list.md`](bug_list.md), раздел «Уровень 2». Ниже — **карта
|
||||
@@ -105,6 +110,45 @@
|
||||
закрыт на уровне 1 (L1-EXIT), но на этом уровне не прогонялся;
|
||||
- **смерть/респавн** возвращают на уровень 2, а не на 1.
|
||||
|
||||
### <a id="rooms-graph"></a>Связность комнат уровней 1–3 (снято 2026-08-05)
|
||||
|
||||
Обход графа `roomlinks` (@1952, по 4 байта на комнату: L, R, U, D; 0 = нет
|
||||
соседа) от стартовой комнаты — тем же методом, которым на уровне 1 нашлись
|
||||
13/18/24 (см. «НЕ БАГИ» в [`bug_closed.md`](bug_closed.md)). Скрипт разовый,
|
||||
в репозиторий не клался: чтение трёх массивов, BFS и проверка симметрии.
|
||||
|
||||
| уровень | старт | недостижимы | признак |
|
||||
|---------|-------|-------------|---------|
|
||||
| 1 | к.1 (0,0) | **13, 18, 24** | ссылки наружу есть, обратных нет |
|
||||
| 2 | к.5 (1,3) | **нет** | граф полностью симметричен, все 24 достижимы |
|
||||
| 3 | к.9 (2,4) | **23, 24** | то же, что на 1: односторонние ссылки, обе комнаты **полностью пустые** |
|
||||
|
||||
```
|
||||
ур.3: 23 L→4, у 4 R=22 | 24 L→2, у 2 R=7
|
||||
23 R→22, у 22 L=4 | 24 R→7, у 7 L=2
|
||||
| 24 U→16, у 16 D=0
|
||||
на 23 ссылается только 24, на 24 — только 23; тайлы обеих = все empty
|
||||
```
|
||||
|
||||
То есть на уровне 3 это даже более чистый случай, чем на уровне 1: там в
|
||||
брошенных комнатах была геометрия, здесь — пустота. Практический вывод тот
|
||||
же: **в 23/24 возможен «мусор в шве»** (наш рендер кромки читает крайнюю
|
||||
колонку соседа ПО ССЫЛКЕ, а сосед соседом себя не считает), приоритет багов
|
||||
там низкий, в игре их не видно.
|
||||
|
||||
**Уровень 2 — недостижимых нет, но есть три КОЛОДЦА без выхода** (единственная
|
||||
связь — вверх, откуда Кид падает):
|
||||
|
||||
```
|
||||
к.10 U→4 пики(2,2) + пол — падение из комнаты 4
|
||||
к.14 U→21 шахта 2 тайла шириной, дно = обломки
|
||||
к.17 U→15 то же
|
||||
```
|
||||
|
||||
Это не баги данных: в 14/17 попадают только падением насмерть, а из 10
|
||||
(если выжил) выхода нет вовсе — так в оригинале. При приёмке не считать
|
||||
«застрял» багом.
|
||||
|
||||
### <a id="l3-chomp"></a>L3-CHOMP. Чомперы — механика уровня 3
|
||||
|
||||
**Где:** 5 штук, комнаты 5(тайл 4), 16(23,24,25), 22(26). Дальше они почти
|
||||
@@ -576,7 +620,15 @@ BUG-1 (провал на row 1 при переходе через открыты
|
||||
Условие «делать ПОСЛЕ CLIP-1» **снято** — CLIP-1 закрыт (см. P0). Проверка —
|
||||
секундомером по одинаковому отрезку рядом с живым SDLPoP, не «на глаз».
|
||||
|
||||
### <a id="l1-pass"></a>L1-PASS. Сквозное прохождение уровня 1
|
||||
### <a id="l1-pass"></a>L1-PASS. Сквозное прохождение уровня 1 — **SMOKE ПРОЙДЕН 2026-08-05**
|
||||
|
||||
> **Прогон 2026-08-05 (пользователь): успешный.** От старта до выхода с
|
||||
> уровня одним заходом — меч подобран, **оба стража побеждены в честном бою**
|
||||
> (без читов), выход отработал корректно. Это smoke: пройдены не все
|
||||
> комнаты, поэтому таблица обхода 24 комнат остаётся открытой. Ценность
|
||||
> прогона в том, что он снял главные риски этапа 1 разом — боёвка,
|
||||
> предметы, переход с уровня — и стал регресс-базой для уровня 2.
|
||||
|
||||
От старта до двери уровня одним заходом: подбор меча, страж, кнопки/ворота,
|
||||
пики, loose-полы, зелье, падения. Это приёмка этапа 1 и одновременно
|
||||
регресс-база для уровня 2.
|
||||
|
||||
Reference in New Issue
Block a user