Уровень 6: переход на 7-й, портал, многокомнатное падение плиты

Всё проверено пользователем в MAME.

1. Переход 6 -> 7 падением.  leave_room (seg002:0504) для «вниз» на уровне 6
   из комнаты 1 даёт особый результат −2, главный цикл (seg000:0893) читает
   его как ++next_level; вход на 7-м (set_start_pos, seg003:0196) ставит Кида
   в комнату 17 и сразу переводит экран на комнату под ней.  Проверка ОБЯЗАНА
   идти раньше связи вниз: у комнаты 1 сосед снизу есть (шахта, комната 3).

2. BUG-BALCONY-RIGHT: правая половина портала не рисовалась.  id 12 стоял в
   FORE_ENV_IDS (в tile_table он fore_id ЗЕЛЬЯ), но зелье рисуется из
   chtab_1, а в chtab_6 под этим номером — правая часть арки балкона 32x62,
   идущая в backtable.  Спрайт уезжал в fore-атлас, env-страница получала
   дырку (idx 12: w=0 h=0).  Найдено трассой POP_TRACE_BT + чтением каталога
   .atl; дифф комнаты с оригиналом 1151 -> 375.

3. BUG-BELOWROW-WALL: жёлтые треугольники в шахте падения.  load_rowbelow
   (seg008:368) при отсутствующей комнате снизу подставляет tiles_0_empty
   колонкам 1..9 и tiles_20_wall только левому краю; у нас стеной забивались
   все 11 позиций.

4. BUG-MOB-MULTIROOM: честный mob_down_a_row (seg007:1387) — кусок переходит
   в комнату снизу и летит дальше.  Плита (1,7) комнаты 6 пролетает шахту
   комнаты 7 и жмёт кнопку (2,7) комнаты 11, открывая ворота комнаты 18.

5. BUG-MOB-STALE-PAGE: чистка следа куска стояла под гейтом «в отрисованной
   комнате» — улетевший вниз оставлял себя на одной из страниц навсегда.

6. BUG-CHAR-STALE-PAGE: тень застывала на двух страницах в РАЗНЫХ позах.
   Прямоугольник и valid пишутся внутри `if (w && h)`, а снимок состояния
   брался безусловно — при нулевом спрайте слот залипал «тихим».  Остаток
   (почему спрайт нулевой) заведён как SPRITE-ZERO-W0 в BUGS_OPEN.

NEXT_SESSION переписан: следующая задача — зацеп за край пола в свободном
падении (вход на уровень 7).  tests-host 5/5, size-check чист.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-11 23:01:58 +03:00
parent e4ef489872
commit 9ecea17ba6
13 changed files with 310 additions and 65 deletions
+18 -18
View File
@@ -1,4 +1,4 @@
# Точка входа для следующей сессии (обновлено 2026-08-11)
# Точка входа для следующей сессии (обновлено 2026-08-11, вечер)
Файл для старта с чистого контекста: где всё стоит, что делать первым, какие
грабли уже собраны. Читать целиком — он короткий. Дальше по ссылкам:
@@ -6,23 +6,22 @@
---
## 1. СЛЕДУЮЩАЯ ЗАДАЧА: [L5-SHADOW](TASKS_OPEN.md#l5-shadow) — уровень 5
## 1. СЛЕДУЮЩАЯ ЗАДАЧА: зацеп в ПАДЕНИИ (вход на уровень 7)
Уровни 1-4 приняты **smoke-тестами**; полные обходы всех комнат делаются по
готовности ВСЕХ уровней ([политика приёмок](TASKS_CLOSED.md#pass-policy),
решение пользователя 2026-08-11) — отдельных `L3-PASS`/`L4-PASS` больше нет.
Уровень 6 пройден и принят: спецсобытие с тенью работает, переход на уровень
7 падением работает. Но **вход на 7-й ломается на механике**: Кид влетает в
комнату сверху и, пролетая мимо края пола, ДОЛЖЕН иметь возможность
зацепиться за него руками. Похоже, этого у нас нет вовсе — проверить и
реализовать.
Уровень 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 прямо в задаче, включая готовые константы.
Куда смотреть: `check_grab` / ветка `action == actions_3_in_midair` в
seg005-seg006 SDLPoP (у нас `POP_ENABLE_JUMP_GRAB` и `check_grab_run_jump`
в `pop_map.c` — это ДРУГОЙ случай, зацеп из прыжка). Начинать, как всегда,
с чтения оригинала, а не с догадок.
Опора: механизм «спецсобытие порождает персонажа в слоте соперника» уже
отработан на скелете (`pop_check_skel`), а сама тень как `charid_1_shadow`
заведена на уровне 4.
Опора: вход падением уже портирован — `FALLING_ENTRY_LEVEL/ROOM` в
`pop_guard.h` + ветка в `pop_start_level` (`roomtest.c`), Кид появляется в
комнате 17 и экран сразу переводится на комнату под ней.
## 2. Состояние репозитория
@@ -85,9 +84,10 @@
(seg007:776) не портирован.
- **TORCH-ANIM-RIGHT** — под запечённым пламенем могут застыть пики/меч/зелье
справа от факела; на уровнях 1-4 такого соседства нет.
- **[GUARD-PHYS](TASKS_OPEN.md#guard-phys)** — остаток: ветка тени в
`check_guard_fallout` (уходит в L5-SHADOW) и живая проверка стража,
нажимающего напольную кнопку.
- **GUARD-PHYS ЗАКРЫТ** 2026-08-11: нажатие напольной кнопки НЕ-Кидом
проверено живьём на уровне 6 (тень встаёт на `closer` и роняет решётку).
- **[GATE-FORE-KID](BUGS_OPEN.md#gate-fore-kid)** — Кид в проёме ворот виден
поверх решётки; портирован только шовный случай.
- Долгие: `BUG-SPIKE-1`, `BUG-CHOMP-JUMP-1` (оба низкий приоритет),
`L3-COLOR`, `L1-SPEED` (игра на ~39 % быстрее оригинала), `TUNE-1`.