ФИКС РЕГРЕССИИ шва: полный seq_39 у стены пропускал Кида сквозь ворота
073a6e0 вернул в safe_step(distance == 0) оригинальный seq_39 — а это шаг на
ОДИННАДЦАТЬ пикселей, который останавливает только бамп. У ворот шва
(ур. 1, комн. 6) наш бамп срабатывает не на том же кадре, что у оригинала
(своя история — BUG-SEAM-PINGPONG), и Кид с разбега ПРОБЕГАЛ сквозь
закрытую решётку между комнатами 8 и 6. Мелким шагом упирался нормально —
то есть промах именно в длине шага, а не в самом бампе.
Теперь ветка разделена по препятствию:
ЧОМПЕР — оригинальный seq_39: бампа там нет по определению (is_obstacle
требует modif == 2), и шаг обязан пройти целиком, иначе Кид топчется на
1 px и не успевает между челюстями;
СТЕНА И ВОРОТА — прежний «шаг-1»: осознанное приближение, проверенное
трассой живого SDLPoP в BUG-SEAM-PINGPONG. Останется таким, пока наш
бамп не сойдётся с оригиналом покадрово.
This commit is contained in:
@@ -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) */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user