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


By a hare's whisker


Бакки О'Хара - прохождение игры за 22:13.6



РОМ: Bucky O'Hare (U) [!].nes
Жанр: 2D-платформер + скроллшутер
Страница пробега: 991M
Фильм опубликован: 2007-11-12
Автор: АнС
Комментарии автора: на английском языке

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

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

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

Ну конечно, после Gradius читателей ТАС-обзоров уже вряд ли можно удивить съёмками того, как игровой персонаж бежит сквозь препятствия, немыслимо срезая углы и задевая врагов чуть ли не всем телом. Но описываемый сегодня ТАС Бакки О'Хары примечателен не тем, как здорово герои игры балансируют на краю своей восьмибитной жизни. Чудеса начинаются, когда они пересекают этот край!

Однако, сначала чуть-чуть о самой игре и её истории. Те, кому посчастливилось увидеть Bucky O'Hare в середине 90-х, вряд ли забудут неоднозначный опыт общения с этим шедевром. ОЧЕНЬ неоднозначный опыт.

Сама игра - вершина творчества KONAMI на ниве восьмибитных платформ. Получив лицензию на разработку игры по мотивам малоизвестного западного мультсериала, компания превзошла даже натренированную на Диснеевских играх CAPCOM. Да и по концепции игра чем-то походит на лучших представителей капкомовской серии Megaman, только с более удобным управлением.

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

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

Пираты не только тиражировали игры без лицензионных отчислений, но и объединяли их в сборники, взламывали оригинальные настройки и создавали довольно любопытные ромхаки. Чаще всего модификация игры ограничивалась увеличением года выпуска (типа "Ninja Cat 1996") и подчищением всех упоминаний об истинном разработчике. Иногда игра преображалась чуть более серьёзно, чтобы теневые дельцы не стеснялись присвоить ей брэндовое имя вроде Chip and Dale 3 или Darkwing Duck 2.

Большинство тогдашних разработчиков не обращало внимания на пиратскую деятельность в наших отсталых странах, всё равно с нас денег не получишь, ибо России нет на глобусе маркетологов Nintendo. Лишь у одной японской компании на этот счёт было особое мнение.

KONAMI всегда выпускала замечательные игры. Фирма очень быстро выросла до уровня мирового издателя игр на все платформы. Откусив немалую долю рынка, компания раньше других озаботилась защитой своих авторских прав. Одними из первых они додумались встраивать антипиратскую защиту прямо в код игры (кстати, они и сейчас шифруют ресурсы по поводу и без. Впрочем, игры у них настолько интересные, что никакая защита от исследователей их не спасает).

Поначалу это были простейшие проверки наличия копирайтов на экране заставки. Если текст не соответствовал проверочному коду, программа просто замирала на заставке. Но пираты очень быстро раскусили этот трюк и научились легко снимать "защиту" бездумным удалением вредоносного кода, подвешивающего игру. Для этого достаточно было базовых знаний ромхакинга.

Тогда KONAMI стала действовать хитрее. Вредоносная часть программы внедрялась прямо в движок игры, становилась его неотъемлемой частью, иногда превращаясь из бага в фичу. А чтобы нелегалы не заподозрили неладное, после обнаружения несоответствия копирайтов программа не виснет, а затаивает обиду в ячейке оперативной памяти приставки. Где-то посреди важной операции загрузки данных ничем не примечательный нолик меняется на единичку.

Только потом, намного позже, когда пираты-оптовики напечатают генеральную партию плат и раздадут пластмассовые коробочки розничным торговцам, а те в свою очередь распродадут все картриджи безликой серой массе потребителей... во время игры единичка проявит себя в полной мере! В Черепашках 3 вы никогда не сможете убить первого Шреддера, в Тини Туне - пройти последний уровень, в TMNT-Tournament Fighters финальная битва зацикливается бесконечно. Ну а в Bucky O'Hare игрок начинает умирать от одного касания, что превращает игру в практически непроходимый кошмар.

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

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

Теперь вы понимаете, я просто не мог не записать её инструментальный спидран!

Выложенный на tasvideos в ту пору пробег от старого зубра Genisto был суров и массивен, так что никто не осмеливался завести разговор о его обгоне. Хотя он был записан с ограничением No damage (без затрат энергии, т.е. фактически без касаний), и за счёт касаний можно было пробежать многие уровни быстрее. Но планка качества мувиков сайта tasvideos в последнее время поднялась так высоко, что для обгона уже не достаточно использования специально не учтённых автором возможностей. Нужно предложить зрителю нечто большее, найти ещё трюки и открыть ещё какие-нибудь незамеченные баги.

А ещё хотелось мне не просто записать спидран, но и воссоздать атмосферу первой встречи с игрой. Пробежать РОМ со сработавшей защитой. Конечно, вручную изменять ОЗУ приставки в ТАСах строго запрещено, но на сайте gamefaqs.com я нашёл спец.пароль "HARD!", устанавливающий тот самый нолик в ту самую единичку. Должно быть, предполагалось, пройдя на приставке игру по-нормальному, можно будет со скуки позаниматься мазохизмом, сыграв в пару уровней СЛОЖНОГО режима.

Итак, пишем скоростной пробег. File -> Open -> Bucky_O'Hare_(U)_[!].zip, File -> Record Movie -> Bucky_No_damage_TAS.fcm -> Record From Start. На рабочем столе я раскрыл два окна FCEU. В одном велась основная работа, в другом на паузе стоял пробег Генисто - для сверки времени, ушедшего на прохождение того или иного этапа. В игре 69 уровней, и каждый из них я намеревался пройти если не быстрее, то как минимум наравне со старым рекордом.

Набор пароля в режиме покадрового ввода занял чуть более секунды. Остановив запись на прологе и сверив таймер с рекордом Genisto, я с удивлением обнаружил, что УЖЕ успел обогнать его на 7 кадров - за счёт того, что после запуска игры ему пришлось прождать полторы секунды, наблюдая мигание пункта "GAME START". Кто бы мог подумать, что ввести пароль можно быстрее, чем просто нажать Start.

И сразу - ещё одна маленькая победа: Зелёную Планету на экране STAGE SELECT удалось выбрать до отображения графики на экране, кнопка Start сработала сразу же после окончания пролога! В NES-играх так часто бывает. Состояние объектов игры отображается на экране чуть позднее, чем осуществилось взаимодействие объектов в памяти приставки. При обычной игре это не заметно, но при записи инструментального спидрана иногда приходится судить об игре не по изображению на экране, а по значениям переменных в памяти. Для этого я предварительно нашёл и выписал в текстовик ряд важных переменных (координаты игрока, жизни босса, таймер неуязвимости и т.д.)

Затем - планирование, важнейший этап при ТАСинге. Иногда на проверку различных маршрутов уходит больше времени, чем на сам процесс записи финального пробега. Не слишком долго думая, я составил такой план прохождения: Зелёная Планета (спасти робота, иначе не пройти Синюю) -> Синяя Планета (спасти кошку, с помощью которой боссы убиваются за пару секунд) -> Красная Планета (накопить второй уровень оружия кошки) -> Жёлтая Планета (накопить третий уровень оружия кошки, т.к. у босса слишком много жизней). Позже на ум пришёл другой вариант: Жёлтая Планета (спасти парня с лазером) -> Зелёная Планета (мгновенно убить босса лазером с первой атаки) -> Синяя Планета -> Красная Планета. Но к тому времени я уже записал половину прохождения, начинать с нуля не захотелось. Чувствую, выйдет мне это когда-нибудь боком. Обгонят же...

На начальных этапах у меня было на примете лишь несколько улучшений, являющихся следствиями упущений предыдущего автора. О парочке из них я прочитал там же на форуме tasvideos, где всегда открыто делятся наработками и советами (активный дух соревнования не мешает взаимопомощи). Другие заметил сам, когда просматривал опубликованный ТАС и периодически переключал эмулятор из режима Play в режим Record. Вместо обычного замедления эмуляции я сразу же решил записывать ТАС в режиме Frame Advance (кадр за кадром), когда FCEU постоянно стоит на паузе, а нажатие определённой клавиши позволяет пропустить эмуляцию ровно на 1 кадр, чтобы затем вновь встать на бесконечную паузу. Таким способом достигается предельный контроль над ходом игры - события развиваются только после нажатия кнопок, а не постоянно.

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

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

Потом я ещё немножко исследовал игру в дебаггере, но толком ничего интересного не обнаружил. Разве что ещё раз проникся уважением к профессионализму программистов KONAMI - код оптимизирован не по-детски, и как следствие, игра практически не тормозит, даже если на экране обсчитывается дюжина самостоятельных объектов (а в аналогичных играх компании CAPCOM дикий лаг начинается уже после 6 объектов).

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

А на Синей Планете вместе с пылью разрушенных ледышек удаляются замороженные внутри враги. Эту уловку практически невозможно повторить без инструментов. Чтобы стереть спрятавшихся врагов, надо нажать SELECT в тот самый кадр, когда бомба попадает в кусок льда. Если нажать SELECT чуть раньше - бомба не долетит до блока и исчезнет в воздухе. А если нажать чуть позже - враг уже проснётся и обязательно задержит игрока на какое-то время.

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

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

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

Возьмём, к примеру, такое понятие как "субпиксели". Многие Дендевские игры вполне обходятся целочисленной арифметикой, храня координаты всех объектов в однобайтовых переменных. Байт может принимать значения от 0 до 255, что как раз вписывается в ограничения разрешения экрана NES (256x240). Каждому значению координат персонажа соответствует реальный пиксель экрана. И никаких внутриигровых координат игрока - только координаты спрайта на экране.

Однако, парни из Конами и тут выдвинули своё особое мнение - добавили игроку дробную часть координаты Y. При игре на реальной приставке это повышает реалистичность физики, так как теперь парабола прыжка становится более адекватной, чем при целочисленных подсчётах. Но ТАСеру от этой реалистичности одна головная боль - приходится учитывать не только координату спрайта, но и невидимую глазом дробную часть этой координаты. Дробная часть может колебаться от 1/255 до 254/255, и соответственно может изменяться высота и длина прыжка. Какие-то полпикселя могут решить, перепрыгнет ли герой между двух пуль, или нет. И это невозможно увидеть на экране, дробную часть координат можно наблюдать лишь непосредственно в памяти приставки. Здесь игра заканчивается, и начинается сверхигра.

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

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

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

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

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

Помимо Жёлтой Планеты мне удалось найти выполнение всех условий лишь в 6 акте Красной Планеты, где понадобилось разыграть довольно закрученную комбинацию, чтобы нарваться на пулю врага в момент, когда далеко внизу по направлению к выходу катится одинокий булыжник. Чтобы забрать врага с собой, в этот раз я даже успел выстрелить в последний момент перед регистрацией смерти.

Несмотря на затраты жизней, этот ТАС вошёл в категорию "No Damage", так как в режиме HARD программа убивает героя сразу, без уменьшения энергии и проверки остатка. Вообще, пробег получил довольно высокую оценку, несмотря на длительность видеозаписи. Двадцать две с лишним минуты - это уже не за всяким завтраком успеешь посмотреть, приходится специально усаживаться за монитор, а значит, и требовать от фильма что-нибудь захватывающее. К счастью, в Бакки О'Хара нашлось достаточно разнообразия, чтобы завоевать внимание нынешнего искушённого зрителя почти на полчаса.

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

Там, на сайте tasvideos я выложил все знания, которые могут пригодиться другим ТАСерам Bucky O'Hare. Конечно, из-за этого кому-нибудь будет легче обогнать меня и отправить текущий спидран на свалку истории. Но атмосфера этого умного сообщества убедила меня - если уж соревноваться, то делать это открыто и честно.

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

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

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

Нет победы слаще той, что была достигнута на волосок от поражения.


Возможные улучшения: сокращение лага в уровне ESCAPE-5, предельно точное позиционирование с учётом субпикселей.

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