Всё дело в том, что при нажатии L+R вызывается обработчик нажатия Up. И всё.
Для начала небольшое отступление.
Ты в курсе, что уровни в РОМе лежат не в том порядке, в котором они проходятся в игре?
Если не в курсе, сделай так. В FCEUX открываешь Hexeditor и в RAM по адресу 0x10 увидишь номер текущего уровня (от 00=интро до 0D=королева). Можешь прям там изменить этот номер. Но чтобы игра не зависла при внезапном переключении уровня, менять это значение надо на экране плана (синяя карта уровней, этот экранчик идёт сразу после разговора T-bird'а).
В итоге таких изменений ты определишь реальную последовательность уровней, а не ту, которая осталась в релизной версии Жаб.
Последовательность в игре: каньон, спуск, гонка, зима, сёрфинг, змеи и т.д.
Последовательность в РОМе: каньон, спуск, гонка, зима, башня, самолёты и т.д.
Так вот.
Для каждого уровня в игре определен набор разрешённых кнопок креста (набор разрешённых направлений перемещения). Вот посмотри в РОМе Battletoads(U) последовательность байтов по адресу 0x1F1F (до 1F2B). Там идут байты со значениями 0F и 03. Если байт равен 0F, то разрешены все 4 направления, если 03 - то только два (вправо и влево).
Например:
1F1F (каньон) - 0F
1F20 (спуск) - 03
1F21 (гонка) - 0F
1F22 (зима) - 03
1F23 (башня) - 03
и т.д.
Можешь поменять (во внешнем хекс-редакторе типа Translhextion) значение по адресу 1F1F с 0F на 03 - и в первом уровне жаба не будет реагировать на кнопки вверх/вниз - она больше не сможет ходить по оси Z (только по оси X - вправо/влево, и по оси Y - прыгая).
А можешь наоборот - изменить значение по адресу 1F22 с 03 на 0F - и в зимнем уровне жаба сможет ходить не только в плоскости экрана, но и по оси Z.
Если не врубаешься в систему координат, вот наглядная картинка.
http://archive.gamedev.net/reference/articles/1927/followingtargets2.gifНу, должен же со школы помнить про ось абсцисс (X) и ординат (Y). А изометрическим играм типа жаб и черепашек требуется полноценная третья координата - хоть и проецируется на экран это всего лишь как смещение по оси Y. На самом деле это надо понимать как уход дальше/ближе к экрану.
Короче, при нажатии ВВЕРХ (или L+R, что одно и то же) жаба переходит по оси Z вдаль от зрителя. При этом спрайт визуально перемещается вверх (проекция изометрического 3D на плоскость экрана), однако в плоскости XY координаты персонажа не меняются (т.к. персонаж не сдвинулся и не прыгал). В итоге, например, во втором уровне вороны атакуют не текущее визуальное положение спрайта (который поднялся из-за ухода вглубь с помощью L+R), а старые координаты (чуть пониже спрайта), потому что вороны остались в плоскости с координатой Z=0, а жаба ушла на Z=100500.