diff --git a/applications/PoP/roomtest/pop_map.c b/applications/PoP/roomtest/pop_map.c index 50bc22f..38ae3a1 100644 --- a/applications/PoP/roomtest/pop_map.c +++ b/applications/PoP/roomtest/pop_map.c @@ -580,12 +580,16 @@ static void check_bumped(void) * climb-up у стены прерывается отскоком). FREEFALL — наш guard: стену * в падении держит do_fall/in_wall. */ if (Kid.action == ACT_FREEFALL || Kid.action == ACT_HANGCLIMB || - Kid.action == ACT_HANGSTRAIGHT) return; + Kid.action == ACT_HANGSTRAIGHT || Kid.action == ACT_MIDAIR) return; if (Kid.frame >= 135 && Kid.frame < 149) return; /* кадры подъёма/спуска */ /* Кадры виса 87..99: в спуске (seq_68) кадр frame_91 идёт ДО act(hang_climb), * т.е. action ещё midair — без этого guard'а bump у стены рвёт цепочку * hang->hang_fall->seq_11 (правильное приземление). */ if (Kid.frame >= 87 && Kid.frame < 100) return; + /* Вне рядов комнаты (падение мимо пола): get_tile даёт WALL, а + * dist_from_wall_forward/x_bump[] — мусор с большим отриц. сдвигом → + * underflow X и уход в стену. fell_out ловит do_fall. */ + if (Kid.curr_row < 0 || Kid.curr_row > 2) return; t = get_tile_at_char(); tcol = Kid.curr_col; if (!wall_type(t)) { t = get_tile_infrontof_char(); tcol = g_infrontx; } if (!wall_type(t)) return;