Зацеп за кромку нижнего ряда: do_fall пускает ряд до 3 + check_grab в midair
Уровень 7, комната 14: спуск с ряда 0 на ряд 2 через зацеп (повис на кромке кнопки (0,2), отпустил, взялся за (2,2)) не работал ни при какой фазе и задержке — Кид пролетал мимо и разгонялся до fall_y = 33, после чего окно зацепа закрыто уже по скорости. Корень: do_fall не давал curr_row выйти за 2, а check_grab целится в тайл ряда curr_row-1 — то есть ряд 2 своей комнаты становится целью только при curr_row == 3. В оригинале (seg005:0030) inc_curr_row безусловный, а get_tile для ряда 3 уходит по links.down (find_room_of_tile, seg006:005D). - pop_map.c do_fall: inc_curr_row теперь 2 -> 3; ветка «достиг y_land» гейтится по curr_row <= 2 (при ряде 3 ни in_wall, ни land звать нельзя — тайлов своей комнаты там нет, а до y_land[4] дело не доходит: комнату меняет check_leave_below на y >= 211). - pop_map.c check_action: восстановлена ветка ACT_MIDAIR (кадры 102..105, seg006:0619) — первые четыре кадра падения, где fall_y ещё не разогнан, зацеп не работал вовсе. Отсюда же «иногда цепляется, иногда нет». - tests-host/t_grab.c: регресс grab_below_room_edge_window_exists — сцена комнаты 14 + переход в 15 по pop_fell_out. До фикса ни одного зацепа, после — окно из 8 фаз X при задержках 0..5 кадров; проверяется и играбельность (зацеп при «отпустил и сразу зажал Shift»). - roomtest.c + pop_guard.h: чит-навигация ставит Кида на верхний ряд в комнате 14 уровня 7 (GRAB_DOWN_LEVEL/ROOM) — снизу этот спуск не проверить. Общее правило (снизу вверх) не тронуто: в верхнем ряду пола чаще нет и Кид проваливается сразу после телепорта. Проверено: tests-host 5/5 (55 в [grab]), size-check OK, живьём в MAME — Кид повис на кромке (2,2): frame=91 y=55 row=0 room=15. Доски: GRAB-BELOW-ROOM в BUGS_CLOSED, GRAB-KBD-TIMING в BUGS_OPEN (отложен пользователем до готовности всех уровней), план L7-FEATHER в TASKS_OPEN. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# Точка входа для следующей сессии (обновлено 2026-08-11, вечер)
|
||||
# Точка входа для следующей сессии (обновлено 2026-08-12)
|
||||
|
||||
Файл для старта с чистого контекста: где всё стоит, что делать первым, какие
|
||||
грабли уже собраны. Читать целиком — он короткий. Дальше по ссылкам:
|
||||
@@ -6,22 +6,24 @@
|
||||
|
||||
---
|
||||
|
||||
## 1. СЛЕДУЮЩАЯ ЗАДАЧА: зацеп в ПАДЕНИИ (вход на уровень 7)
|
||||
## 1. СЛЕДУЮЩАЯ ЗАДАЧА: зелье МЕДЛЕННОГО ПАДЕНИЯ (уровень 7, комната 1)
|
||||
|
||||
Уровень 6 пройден и принят: спецсобытие с тенью работает, переход на уровень
|
||||
7 падением работает. Но **вход на 7-й ломается на механике**: Кид влетает в
|
||||
комнату сверху и, пролетая мимо края пола, ДОЛЖЕН иметь возможность
|
||||
зацепиться за него руками. Похоже, этого у нас нет вовсе — проверить и
|
||||
реализовать.
|
||||
План готов и лежит в [`TASKS_OPEN.md#l7-feather`](TASKS_OPEN.md#l7-feather) —
|
||||
шесть шагов с уже выписанными константами оригинала (ускорение 1 / потолок 4,
|
||||
`SEQ_JMP_IF_FEATHER` → ветки `stepfloat`/`bumpfloat`, зелёная вспышка, зелёные
|
||||
пузырьки, таймер 18,75 с). Начинать прямо с шага 1.
|
||||
|
||||
Куда смотреть: `check_grab` / ветка `action == actions_3_in_midair` в
|
||||
seg005-seg006 SDLPoP (у нас `POP_ENABLE_JUMP_GRAB` и `check_grab_run_jump`
|
||||
в `pop_map.c` — это ДРУГОЙ случай, зацеп из прыжка). Начинать, как всегда,
|
||||
с чтения оригинала, а не с догадок.
|
||||
**Зацеп в падении — закрыт 2026-08-12**
|
||||
([GRAB-BELOW-ROOM](BUGS_CLOSED.md#grab-below-room)). Оказалось, что зацеп
|
||||
из падения был жив, а сломан был спуск через НИЖНЮЮ кромку комнаты (уровень 7,
|
||||
комната 14): `do_fall` не пускал ряд персонажа до 3, и `check_grab` на этом
|
||||
отрезке не звался ни разу. Плюс восстановлена ветка `ACT_MIDAIR` (кадры
|
||||
102..105 — начало падения). Проверено хост-тестом `t_grab` и живьём в MAME.
|
||||
|
||||
Опора: вход падением уже портирован — `FALLING_ENTRY_LEVEL/ROOM` в
|
||||
`pop_guard.h` + ветка в `pop_start_level` (`roomtest.c`), Кид появляется в
|
||||
комнате 17 и экран сразу переводится на комнату под ней.
|
||||
Осталась ощущенческая часть — [GRAB-KBD-TIMING](BUGS_OPEN.md#grab-kbd-timing):
|
||||
зацеп при входе на уровень 7 срабатывает менее стабильно, чем в оригинале
|
||||
(подозрение на клавиатурный модуль и на общий темп игры, `L1-SPEED`).
|
||||
**Решение пользователя: разбирать после того, как будут готовы все уровни.**
|
||||
|
||||
## 2. Состояние репозитория
|
||||
|
||||
|
||||
Reference in New Issue
Block a user