diff --git a/applications/PoP/roomtest/pop_ctrl.c b/applications/PoP/roomtest/pop_ctrl.c index 0fd3cc7..b7cc5de 100644 --- a/applications/PoP/roomtest/pop_ctrl.c +++ b/applications/PoP/roomtest/pop_ctrl.c @@ -229,18 +229,33 @@ static void safe_step(void) if (distance) { Char.repeat = 1; seqtbl_offset_char((uint8_t)(distance + SEQ_STEP_BASE)); - } else if (pop_edge_type() != EDGE_WALL && Char.repeat != 0) { + } else if (pop_edge_type() == EDGE_WALL) { + /* ВПЛОТНУЮ К ПРЕПЯТСТВИЮ. Оригинал (seg005:0604) уходит здесь в + * seq_39 — а это шаг на ОДИННАДЦАТЬ пикселей, который останавливает + * только бамп. + * + * ЧОМПЕР: бампа нет по определению (в разомкнутой фазе он не + * препятствие, is_obstacle требует modif == 2), и шаг обязан пройти + * целиком — иначе Кид топчется на 1 px и не успевает между + * челюстями. Здесь играем оригинальный seq_39. + * + * СТЕНА И ВОРОТА: держим «шаг-1» — осознанное приближение. Наш бамп + * ловит не тот же кадр, что у оригинала (см. BUG-SEAM-PINGPONG, там + * трасса живого SDLPoP: `safe_step(d=0) -> step, на первом dx(1) + * x=62 -> bump`), и с полным seq_39 Кид ПРОБЕГАЕТ сквозь закрытые + * ворота шва комнаты 6 — поймано приёмкой 2026-08-08. Пока бамп не + * сойдётся с оригиналом покадрово, этот шаг остаётся коротким. */ + if (pop_edge_tile() == TILE_CHOMPER) { + seqtbl_offset_char(SEQ_39_UNSAFE_STEP); + } else { + Char.repeat = 1; + seqtbl_offset_char((uint8_t)(1 + SEQ_STEP_BASE)); + } + } else if (Char.repeat != 0) { Char.repeat = 0; seqtbl_offset_char(SEQ_44_STEP_ON_EDGE); } else { - /* Вплотную к СТЕНЕ оригинал тоже уходит сюда — seq_39 (шаг 11). - * Раньше здесь стоял «маленький шаг-1»: у стены результат тот же - * (трасса живого SDLPoP в BUG-SEAM-PINGPONG: `safe_step(d=0) -> step, - * на первом dx(1) x=62 -> bump`), но у ЧОМПЕРА бампа нет — в - * разомкнутой фазе он не препятствие, — и оригинал уносит Кида на все - * 11 px, а мы шагали на один. Отсюда «микрошаг вместо нормального - * короткого шага» перед челюстями (приёмка 2026-08-08). */ - seqtbl_offset_char(SEQ_39_UNSAFE_STEP); + seqtbl_offset_char(SEQ_39_UNSAFE_STEP); /* реальный обрыв (edge=CLOSER) */ } }