Новости :: Переводы :: Наши проекты :: Документация :: Утилиты :: Ромхакинг :: TAS :: GameFAQs
Гостевая книга :: Форум :: 2RTeam :: CaH4e3 :: Zelda64Rus :: RRC2008 :: О нас


If you look hard enough...


Супер Марио - прохождение игры за 4:58.53



РОМ: Super_Mario_Bros._(JU)_(PRG0)_[!].nes
Жанр: 2D-платформер
Страница пробега: 1022M
Фильм опубликован: 2007-12-14
Автор: klmz
Комментарии автора: тут

Характеристики фильма:

* Максимально быстрое прохождение
* Используется пропуск уровней
* Эксплуатируются ошибки в программе

В декабре 2007 года сообщество спидраннеров было сотрясено невероятным происшествием! ТАСер-новичок из Китая побил рекорд скоростного прохождения Super Mario Bros на NES!


Всегда казалось, уж что-что, а былинный пробег SMB улучшить невозможно по определению. Потому что это та самая игра. В неё играли миллионы людей, пройти на скорость пробовали тысячи, а сотни фанатов разбирали игру по винтикам, привлекая к исследованиям весь аналитический аппарат, доступный человечеству в наши дни.

Через 20 лет (1985-2005) все особенности игры были изучены, все трюки найдены, РОМ дизассемблирован и обстоятельно разобран на логические составляющие. Большая часть находок подробно документирована и ныне доступна любому желающему. Часть трюков игры описана на отдельной страница TASvideos - SMB Tricks.

Среди фанатов-ТАСеров ожесточённые соревнования по отвоёвыванию секунд завершились в том же 2005 году, и финальный результат был истинным эталоном упорной шлифовки кнопочного ввода.

Скоростное прохождение за авторством R.Yoshizawa было последним улучшением мирового рекорда, и оно было лишь на 4 кадра (1/15 секунды) быстрее предыдущих видеозаписей. Больше улучшать было нечего.

С тех пор прошло 2,5 года. Сотни достойнейших пробегов обнаружили свою неполноценность и были отправлены на свалку истории, освободив место новым героям. Но рекорд SMB был нерушим. На него уже начали ориентироваться обычные спидраннеры, некоторые из них умудрялись изучить и повторить часть трюков без TAS-инструментария, и со временем видеозапись живого прохождения Super Mario Bros вплотную приблизилась к границе 5 минут.

Нельзя сказать, что попыток побить старый рекорд не было совсем. Старик-перфекционист Phil, занимающийся TAS'ами ещё с 2004 года, давно грозился выложить обгон на 2 кадра (1/30 секунды), но большинство относилось к идее скептически. Трудно заметить улучшение в 2 кадра даже при внимательнейшем наблюдении экспертов.

Теперь вы представляете, как сильно были удивлены бывалые ТАСеры, когда на сайте объявился обгон легендарного пробега на целых 84 кадра. Его автор не изобрёл новые инструменты и не раскопал в коде игры очередные уязвимости. Он просто нашёл способ применить старые трюки к неочевидным препятствиям. Впрочем, обо всём по порядку.

Перед нами скоростное прохождение c использованием труб-порталов для пропуска уровней. Если вас больше интересует полное прохождение всех 8 миров Super Mario Bros, на tasvideos оно тоже имеется. Есть даже первоапрельская шутка в виде прохождения игры без единого нажатия кнопки B. Однако, только версия с пропуском уровней породила серьёзное соревнование ретро-игроков.

Физический движок Super Mario Bros весьма сложен по сравнению с другими играми 80-х годов. В движениях Марио много нюансов, не заметных невооружённому глазу. При обычной игре (так сказать, на макроуровне исследования SMB) управлять героем удаётся лишь с большой степенью погрешности в действиях. С непривычки довольно сложно предугадать, куда запрыгнет персонаж, если на некую долю секунды нажать Вперёд + A + B. К счастью, благодаря продуманному дизайну уровней борьба с хитроумной физикой остаётся единственной сложностью для новичка. А опытный игрок уже подсознательно учитывает силу гравитации, добавочное ускорение кнопки B и множество других факторов. Тем не менее, некоторая погрешность всё же остаётся.



При инструментальной игре рассчёт действий можно перенести из сферы подсознания в сферу вполне рационального мышления. Причинно следственные связи становится возможным описать вполне очевидными формулами. К примеру, как обычный спидраннер начинает уровень Супер Марио? Ещё в время заставки нажимает Вправо + B и держит. ТАСер же может не суетиться, а чётко определить первый миг, когда нажатие Вправо + B будет действовать как разбег. Записав в файл тривиальное решение (Вправо + B нажимается в момент прорисовки на экране фонового рисунка уровня), можно и поэкспериментировать с менее логичными вариантами, например, нажимать B через раз, или чередовать нажатие Вправо с нажатием Влево + Вправо.

Именно такими нелогичными методами древние ТАСеры обнаружили самый быстрый способ разогнаться с нулевой скорости до максимальной. В начале уровня (или выходе из трубы) нужно развернуться влево и совершить небольшой прыжочек назад (вправо, но спиной), после этого зажав Вправо на несколько кадров. Пока скорость Марио не достигла значения "40", повторить задний прыжок с разворотом, после чего можно просто зажимать Вперёд + B и мчаться по уровню на максимальной скорости.

Вы, наверное, уже догадались, что в течение всего пробега Марио суждено оставаться маленьким, так как никаких скоростных преимуществ у большого Марио нет, и терять время на ожидание призов здесь никто не станет. На этот случай есть полное прохождение.


Как известно, в первом уровне SMB есть возможность сократить путь, спустившись по трубе в подземный тайник. Здесь стоит отметить ещё один простенький приём: чтобы добраться к выходу поскорее, игрок подпрыгивает и падает с высоты, набирая более высокую скорость спуска. Подобное использование гравитации применимо практически во всех платформерах, и оно интуитивно понятно даже человеку, далёкому от компьютерных игр.

Со второго уровня начинаются гораздо более удивительные трюки - Марио беззастенчиво скачет мимо плотоядных цветов из труб, проходит сквозь стены и убивает врагов головой.


С цветками из труб всё ясно - хорошо просчитанными движениями можно не допустить пересечения физических границ (collision box) объектов. И даже если визуально спрайты будут заметно пересекаться, прикосновение к врагу не будет зарегистрировано системой.

А вот удары по врагам снизу выглядят каким-то наглым читерством. Противник падает на голову прыгающего под ним Марио, но после столкновения герой продолжает прыжок ввысь, а враг падает побеждённым. Всё происходит совсем не так, как привыкли понимать правила игры обычные приставочники.


Из-за этого логического несоответствия феномен TAS очень нелегко принимался массами в начале своего развития. Всё дело в том, что люди склонны подменять реальность своими представлениями о ней.

Да, в реальной жизни Марио был бы раздавлен, так как враг в момент столкновения находился над ним. Но из-за слабой мощности микропроцессора Денди разработчики SMB решили сэкономить ресурсы, упростив рассчёты до предела, приемлемого сознанием игрока. Пока адекватность физики не ставится человеком под сомнение, его подсознание будет незаметно дорисовывать недостающие фрагменты.

А в действительности же процесс раздавливания врагов реализуется по одному простому правилу: если при пересечении игрока с объектом врага Марио находится в падении (вектор вертикального ускорения направлен вниз), то автоматически подразумевается, что Марио запрыгнул на врага сверху.


Сравнение координат Y не производится, так как перемещение объектов дискретное, то есть за один кадр Марио мог упасть на врага сверху и пролететь ниже его центра, так что в момент регистрации пересечения его Y оказался ниже Y врага.

А так как после раздавливания врага Марио подскакивает от него вверх, невнимательный зритель даже не замечает, как фаза подъёма прыжка Марио перешла в фазу падения перед самым столкновением, а затем вновь началась фаза подъёма.

И наконец, вопрос на миллион - как же Марио проходит сквозь стены? Рассчёт коллизий с бэкграундом в SMB реализован вполне стандартно для NES - пересечение с непроходимым блоком определяется постфактум, после чего включается сила выталкивания, которая корректирует координаты героя так быстро, что без замедления и не заметишь, как нога Марио на долю секунды попала внутрь кирпича. Однако, обладая нечеловеческой реакцией, эту силу можно обмануть. Выталкивание обычно происходит в противоположную движению игрока сторону. Это логично - если игрок бежит вправо и сталкивается с каменным блоком, его должно отталкивать влево. Но если исхитриться, можно сразу же после активизации силы выталкивания направить Марио влево, успев сменить направление движения за те десятые доли секунды, пока персонаж ещё находится частично внутри блока. Тогда сила выталкивания начнёт непреклонно гнать спрайт вправо (противоположно движению), тем самым всё более втягивая его внутрь блока!

Для полного прохождения сквозь блок (16x16 точек) подобного фокуса не достаточно. Втягивающая сила вскоре компенсируется нажатием кнопки Назад, и Марио выйдет из блока. Но тут на помощь приходит другая особенность физических рассчётов SMB - в прыжке направление движения не меняется. Попробуйте сами совершить большой прыжок вправо и на лету развернуться, зажав Влево. Ничего не выйдет! Смена кнопки зарегистрируется, но Марио продолжит движение вперёд, пока не упадёт на землю. Это вам не Chip&Dale, где можно было менять направление прыжка в воздухе. Здесь инерция накладывает свой отпечаток на ход игровых событий. Между прочим, более реалистичная физика SMB, возможно, и является главной причиной популярности игры.


Так вот, чтобы при нажатии Назад Марио всё же двигался вперёд, и при этом сила выталкивания только помогала бы ему в этом, требуется находиться в состоянии спуска после прыжка с подбиванием кирпичей над головой. Проще всего такое проникновение в стенку реализуется в ситуации, когда Марио ударяется о кирпичный потолок перед самой стеной, как на иллюстрации справа. Здесь автору потребовалось совершить несколько микропрыжков, на фазе спуска каждого из которых объект проникал в стену всё глубже и наконец достиг полного погружения.


Если потолка перед стенкой нет (или он слишком высоко), то реализовать проникновение всё же можно, но это требует огромного терпения и множества перезаписей неудачных прыжков. Ключевым фактором является определённая скорость вертикального и горизонтального смещения, позволяющая ещё до приземления на нижнюю границу блока проникнуть внутрь его более, чем наполовину. Тогда при последующем прыжке Марио удастся подбить верхний блок так же, как это делалось в случае с потолком перед стеной.

Сложно расписывать всё это... Даже если вы сейчас понимаете всё сказанное, для полного разбора процесса проникновения в стену необходимо смотреть нажимаемые кнопочные комбинации в покадровом режиме.


Вернёмся к нашему спидрану. Благодаря прохождению сквозь стены, автору удаётся попасть на экран WARP ZONE гораздо быстрее, чем было задумано разработчиками. Настолько быстрее, что игра не успевает инициализировать места назначения для телепортов, и если бы игрок спустился по первой трубе до того, как над ней загорится цифра "4", его бы выбросило в уровень, сформированный случайным образом из посторонних данных РОМа, не предназначенных для дизайна уровней. Этот незапланированный уровень среди ромхакеров получил название "Minus World". WORLD _-1 закольцован в себе, и портал в конце его карты не ведёт никуда.

Если есть желание посмотреть, что из себя представляет Minus World, можете остановить проигрывание FCM-файла, как только Марио проник в стенку перед WARP ZONE. Залезайте в ближайшую трубу до появления цифр на экране. Естественно, спидраннеры не станут спускаться в телепорт до полной инициализации мест назначения в памяти приставки. Уже на первой минуте видеозаписи автор нового рекорда попадает на уровень 4-1.

Пробегая наземные уровни, важно не только максимально быстро достигнуть замка, но и не допустить промедления во время межуровневых демонстраций. Вспомните, иногда после пересчёта очков в небе над замком вспыхивают фейерверки. Эти, несомненно, приятные вещи, к сожалению, только удлиняют общее время пробега, поэтому необходимо их избегать. Выяснилось, что количество залпов зависит от оставшегося времени в момент прикосновения Марио к шесту с флагом перед замком. Если последняя цифра таймера равна 1, 3 или 6, на экран высыплет равнозначное количество вспышек. Поэтому порой лучше уж задержаться на полсекунды при преодолении карты уровня, чтобы прийти к замку в более удачное время.

Кроме того, благодаря появлению инструмента "Frame Counter" ТАСеры обнаружили очень неприятную особенность межуровневых заставок. Всем издавна приходится мириться с тем, что при затемнении экрана (конец уровня или переход по трубе) игра приостанавливается на N кадров (происходит загрузка данных нового уровня), обычно менее секунды. Но в SMB время ожидания во тьме искусственно выставляется игрой так, чтобы момент старта уровня был кратен числу 21. То есть, даже если кому-то удастся обогнать предыдущий рекорд прохождения 1 уровня на треть секунды, игра просто увеличит задержку между уровнями на 20 кадров, и в итоге следующий уровень всё равно начнётся с той же временной отметки, как у предыдущего ТАСера. Если же обогнать рекорд на секунду (60 кадров), то реальынй обгон составит 42 кадра, а 18 кадров сгинут во время затемнения экрана.

Эта особенность SMB получила название "правило 21 кадра". Именно из-за неё гонка за рекордами в Super Mario Bros считалась давно завершённой - все небольшие улучшения не могли изменить финальный счёт, разве что в последнем уровне пара выигранных кадров могла уменьшить итоговое время на 2 единицы.

Ладно, всё это было известно уже очень давно, что же придумал автор обозреваемого пробега? Просмотрев предыдущие рекорды, klmz изучил продемонстрированный в них способ проникновения в стенки и попробовал пройти сквозь железный блок, на котором установлен шест с флагом. Перед каждым замком есть такой шест, призванный измерить ловкость игрока.

Сквозь блок пройти не удалось, зато после незапланированного выбрасывания спрайта вверх проявился неожиданный эффект - анимация спуска флага не запустилась, и Марио без лишних проволочек прошествовал к дверям замка. В результате уже первый уровень завершился на 31 кадр раньше, чем в легендарном неулучшаемом пробеге! Впрочем, из-за выравнивания во время затемнения 10 кадров было потеряно.

Уже потом самые въедливые ТАСеры прошерстили листинг кода игры и нашли объяснение этому трюку. Всё до удивительного просто. При касании шеста запускается анимация спуска флага, которая заканчивается при Y флага = низшая точка шеста. В процессе проигрывания этой анимации Марио спускается по шесту вниз, и вскоре его Y добирается к низшей точке, запускающей анимацию спрыгивания с шеста. Однако, если таймер спуска флага ещё не обнулился, достижение низшей точки не запустит процедуру спрыгивания.

Если же Марио внезапно выскакивает на шест снизу, а не слева, как это положено по задумке создателей, то сразу после запуска анимации флага проверяется Y-координата Марио, и в соответствии с низшей точкой шеста запускается процедура спрыгивания и входа в замок. Таймер спуска флага просто не успевает инициализироваться, чтобы отложить спрыгивание до окончания спуска.

Вот таким нехитрым способом один китаец обогнал одного японца на 84 кадра, применив трюк 4 раза (в предпоследнем уровне его применению помешала цифра 3 в последнем разряде таймера - фейерверки нам ни к чему). Вот такая у нас сегодня лекция по геополитике.

Ну как, ещё не устали? Напоследок расскажу о том, как автор проникает в WARP ZONE уровня 4-2 без взбирания по бобовому стеблю. Все, кто играл в SMB в детстве, помнят, что проход на уровни 6-7-8 скрыт в бонус-уровне, попасть в который можно только забравшись по стеблю, вырастающему из невидимого кирпича в WORLD 4-2. Кто не помнит, тот не ретрогеймер!

Для спидраннера путешествие по стеблю грозит серьёзной задержкой - необходимо подбить ряд кирпичей для формирования лестницы, а потом ещё игра ощутимо долго показывает анимацию взбирания к небу. Я не зря в начале обзора упоминал про дизассемблированный код игры - на этот раз плод ромхакинга помог исследователям обнаружить хитрый способ подмены бобового стебля обычной трубой, по идее ведущей в бонус-комнату.


Порталы в SMB устроены таким образом, что в рамках определённого участка уровня может находиться лишь один адрес прибытия (WARP ZONE не в счёт). Когда скроллирующийся экран выходит за пределы действия определённого портала, в адрес назначения вписывается номер другого местечка. Уровень 4-2 спроектирован так, что портал-стебель находится прямо перед порталом-трубой, ведущей в комнату с монетками. Если Марио удастся пролезть в трубу, пока левый край экрана ещё находится в зоне действия стебля, адресом назначения будет оставаться бонус-уровень.


Как это сделать? Нужно сместить положение Марио в рамках экрана. Обычно экран скроллируется равномерно, в соответствии с бегом Марио, поэтому на оси X спрайт героя всегда находится в центре. Продвинуться правее центра можно лишь убедив процедуру скроллинга, что Марио никуда не торопится, а при этом втихаря продвигаться вперёд.

Достигается такой обман всё тем же проникновением в стенку - пока сила выталкивания замораживает скроллинг экрана, Марио вовсю копает вправо, в итоге достигнув оптимального отношения координаты X к краю экрана. Этого расстояния вполне достаточно, чтобы влезть в трубу-портал, пока левый край экрана ещё не вышел из зоны действия бобового стебля - выше на схеме этот трюк показан голубой рамкой.

В итоге, потеряв несколько кадров из-за необязательного проникновения в стенку, игрок выигрывает целую охапку секунд благодаря более быстрому появлению в бонус-уровне. Подобный трюк используется автором и в уровне 8-4, но там он нарочно скроллирует экран вперёд, чтобы записать в адрес назначения номер подводного уровня, а затем возвращается к ближайшей трубе, которая до этого вела в самое начало замка.

Все описанные трюки были найдены людьми из разных стран ещё 4-5 лет назад, новинкой 2007 года стал лишь приём с флагом на шесте.

Когда легендарный рекорд 2005 года оказался побит, что-то в мире неощутимо изменилось. Никто более не может быть уверен в совершенстве готовых решений. Как бы ни хотелось, уже не получится с чистой совестью назвать хотя бы один TAS предельно скоростным...

..А ведь поначалу мы храбрились, неоспоримо утверждали, что именно благодаря Tool-Assisted Superplay мир может притронуться к теоретическому пределу классических игр. Когда инструментальщики обгоняли самые известные рекорды обычных спидраннеров, говорили - вот это и есть теоретический предел.

Но оказалось, всё не так просто. Совершенство всё так же неуловимо, оно уходит от исследователя, даже когда он вооружается самыми хитроумными методами и приспособлениями. Трудно сказать, намного ли приятнее осознавать себя на расстоянии X секунд от идеала, чем на расстоянии Y.

И всё же, в тот период с 2005 по 2007 год автор "совершенного" ТАСа был счастлив в своей иллюзии. Как Исаак Ньютон с высоты своего времени мог считать, что познал все законы этого мира в единой непротиворечивой системе, ТАСер смог хотя бы на короткое время почувствовать полное, абсолютное удовлетворение от своей работы.

Быть может, в этом и есть смысл superplay.


Возможные улучшения: Не знаю, но уверен - они существуют.

АнС, 7.03.2008
Ссылками мы не меняемся.
Страница админа
        © 2001-2023 Shedevr Team.