Данная запись является вольным пересказом видео Можно ли загрузить невозможный уровень в Super Mario Maker? .
В видео есть ссылка на видео Невозможный уровень , поэтому я тоже перескажу.
Мой пересказ не претендует на точность, просто хочу поделиться интересным материалом.
О чем мы будем говорить
Поиск ошибок в программном обеспечении может быть самым разным.Я ищу ошибки в исходных кодах, в бинарных файлах, в больших пакетах ПО и даже в каком-то железе.
Но есть область, в которой я почти никогда ничем не занимался — поиск ошибок в компьютерных играх.
Люди тратят много времени на поиск ошибок в играх.
Это могут быть логические, математические и даже программные ошибки.
Некоторые люди делают это, чтобы взглянуть на игру под новым углом, а другие стараются пройти игру хотя бы на несколько секунд быстрее, чем любой другой игрок.
Мне кажется, именно сообщество спидраннеров (людей, играющих в игры на скорости) внесло огромный вклад в поиск игровых глюков и ошибок.
Но сэкономим время при прохождении в другой раз; сегодня мы как раз поговорим о поиске ошибки в игровой логике.
В сентябре 2015 года Nintendo выпустила Super Mario Maker — платформер о знаменитом водопроводчике Марио.
Одной из ключевых особенностей игры стала возможность пользователей создавать свои собственные уровни (здесь они называются уровнями) и делиться ими с другими игроками.
Кто-то создает уровни, отслеживает процент успешных прохождений, а кто-то эти уровни действительно проходит. Именно в этот момент у игроков-исследователей зачесалось — а можно ли опубликовать непроходимый уровень?
Нет смысла рисовать что-то подобное; хотя уровень действительно непроходимый, опубликовать его мы не сможем.
Перед Nintendo стояла довольно интересная задача — как не допустить «захламления» библиотеки пустыми и непроходимыми уровнями.
И они с этим хорошо справились.
Решение довольно изящное и уже не раз использовалось в играх с похожей творческой концепцией: вам нужно пройти уровень самому, прежде чем публиковать и загружать на сервер.
Причём один раз с самого начала и один раз с каждой контрольной точки.
По сути, задача сводится к тому, что необходимо разработать курс, который автор может пройти во время публикации, а не после нее.
Попытка №1. Кодовый замок
В игре множество объектов, которые взаимодействуют друг с другом по известным правилам.Можно попробовать воспроизвести что-то похожее на кодовый замок.
Например, можно взять следующую заготовку:
Купа (1) не может проходить сквозь монстров на своем пути (3), за исключением призраков (2).
Монстры, находясь друг у друга на головах, не разбегаются и не стоят на месте.
Если Марио ударит по кирпичному блоку (4), нижний монстр стопки умрет, а призрак опустится на один блок ниже.
Если призрак окажется на одной линии с купой, она сможет двигаться дальше.
Автор уровня знает количество монстров перед каждым призраком, и он знает, сколько раз нужно ударить по каждому блоку, чтобы расчистить путь для купа.
Как только купа пройдет мимо всех монстров, она активирует триггер и освободит проход для Марио.
Этот пример приведен исключительно для наглядности – в реальных попытках сделать кодовый замок все было сложнее.
Игрок не видит монстров; уровень разделен на независимые сегменты, в каждом из которых вам нужно знать, сколько раз и по какому кирпичу ударить.
И только точное прохождение всех отрезков открывает проход к выходу из курса.
К сожалению, данный подход имеет ряд существенных недостатков:
- Какой-нибудь ботаник-энтузиаст может потратить много времени на количественный анализ всего.
- Удачливый игрок просто ударит случайно выбранные блоки, и ВНЕЗАПНО это будут те самые блоки, по которым нужно ударить точное количество раз.
- Игроки могут просто скачать курс и открыть его в редакторе.
После изучения, при должном старании, они выучат «код».
Попытка №2. Красные монеты
Пользователь ReflectivistFox разместил видео Невозможный уровень в котором он предложил интересную идею публикации непроходимого уровня.Правда, есть существенное ограничение: ее ход проходим, если играть от начала до выхода, и АБСОЛЮТНО, ТОЧНО, ПОЛНОСТЬЮ, ПОЛНОСТЬЮ непроходим, если использовать КПП.
Казалось бы, при таких ограничениях рассматривать понятие уровня уже не так интересно, но на самом деле даже такой шаг очень важен.
Вы еще помните, что при загрузке уровня его нужно проходить не только с начала, но и с каждой контрольной точки? ReflectivistFox преодолел половину лимита - его уровень можно пройти во время загрузки, но не в обычном режиме.
Ключевая идея — использовать игровой элемент «красная монета» (сразу уточню, что игроки называют их и «красными», и «розовыми».
В предыдущих играх серии Mario они были красными, а в Super Mario Maker стали розовыми).
Принцип их действия одинаковый, поэтому здесь и далее я буду использовать только «красный»).
На обычных уровнях красные монеты используются как части ключа, который нужно собрать.
Автор курса размещает несколько таких монет в труднодоступных местах.
Как только Марио соберет их все (игрок знает точное количество монет), он получает ключ от специальной двери, за которой могут быть какие-то бонусы или проход дальше по уровню.
Важной особенностью является то, что на эти монеты особенно влияют контрольные точки.
Контрольная точка сохраняет игру, когда Марио ее активирует. Если игрок проигрывает, персонаж умирает, то загрузка происходит с последней контрольной точки.
Восстанавливаются все игровые элементы: враги, бонусы и т. д. Но не красные монеты.
Они не восстанавливаются, хотя количество собранных монет сохраняется.
И это еще не все особенности.
Если вы соберете все красные монеты и проиграете, поведение изменится – счетчик обнулится, а монеты окажутся на своих прежних местах.
ReflectivistFox использовал на своем уровне две особенности игры.
Обратите внимание, что КПП (красный флажок в центре) наполовину перекрыт блоком.
Эта установка создает интересный эффект — активировать ее можно, дойдя до верхнего блока, но при загрузке игра не сможет создать персонажа внутри блока, и он «выпадет» внизу, возле дверей и динозавра.
.
Таким образом, игрок, загрузившийся с контрольной точки, будет перенаправлен на альтернативный маршрут. На этом маршруте его ждет:
Элементов здесь много и кратко описать очень сложно, поэтому выделю только самое важное.
Из двери появляется Марио и его взгляд направлен так же, как на картинке, и ему нужно добраться до двери справа (4).
Для этого ему нужно идти по стрелкам влево, подняться вверх и пройти по блокам сверху вправо (на скриншоте путь вверх и вправо проходит полностью по границе, но более удачного выстрела быть не может).
взятый).
Особая конструкция предметов (1) запрещает персонажу поворачиваться; если он это сделает, объект (2) исчезнет, а проход будет заблокирован подвижной стеной над ним.
Все остальные методы зависят от использования драконом блока военнопленных (3) — он будет отталкиваться и двигаться спиной, что позволит ему уйти влево, не провоцируя заранее группу (1).
К сожалению, перемещение блока военнопленных (3) делает невозможным использование двери (4).
Чтобы войти в дверь, игроку необходимо положить что-нибудь под дверь, чтобы оно оказалось с ней на одной горизонтальной линии.
Игрок может попытаться ловкостью рук поднять блок военнопленных (3) и донести его до двери, но автор позаботился и об этом — вертикальная часть маршрута слишком высока, чтобы ее можно было преодолеть обычным прыжком.
Все варианты, которые есть у игрока, приведут к тому, что военнопленный взорвется или не сможет доставить блок к двери (4).
Именно с такой неразрешимой ситуацией сталкивается игрок, решивший пройти этот уровень с чекпоинта.
Но как через это прошел сам автор при публикации? Обратите внимание на блок (пустой), который я отметил цифрой 5. Изначально в этом месте лежит красная монета.
Во время прохождения, вплоть до чекпоинта, игрок не может пройти мимо и обязательно заберет эту монету, именно поэтому это место сейчас пустует. Во время проверки игра не может определить, какие красные монеты собрал игрок, поэтому она, загружая игровое состояние на контрольной точке, восстанавливает все красные монеты, давая возможность неосторожному игроку собрать их все при необходимости.
Вторая красная монета встроена в стену и не может быть собрана, тем самым гарантируя невозможность сброса счетчика монет, и поэтому во время игры на месте блока (5) не будет монеты, когда она понадобится.
И во время публикации он гарантированно будет там - что позволяет использовать его вместо блока военнопленных (3), чтобы переместиться влево и спокойно выйти за дверь (4).
А рядом уже есть выход с курса.
Результат этой попытки:
- Вы можете пройти уровень, если вообще не используете чекпоинт. Поэтому этот метод нам не подходит.
- Прохождение уровня при публикации и во время игры все равно имеет геймплейные различия, а значит, нужно продолжать поиски.
Попытка №3. Странный гриб
Разница найдена! Это так называемый «странный гриб».Есть вероятность 1%, что вместо обычного гриба появится странный гриб.
Вот как выглядит странный гриб.
Вот Марио после.
использования гриба.
Странный Марио отличается от обычного Марио значительно более высокими и длинными прыжками.
Кроме того, если Марио сначала съест обычный гриб, а затем странный, Марио станет странным.
Если сделать наоборот, все равно останется странным – обычный гриб не окажет никакого эффекта.
Если бы все было так просто, любой мог бы создать такой уровень:
Длина рва специально рассчитана так, что обычный Марио не сможет его перепрыгнуть, а вот чужой сможет легко перепрыгнуть.
Достаточно переигрывать снова и снова, пока не появится странный гриб.
К сожалению, этот метод нам не подходит, так как дает целый 1% вероятности прохождения.
К счастью, Nintendo тоже не устраивает уровень из-за того, что 99% его непроходимо и они решили исправить эту ситуацию.
На момент публикации странные грибы никогда не появятся.
Вот! Нам просто нужно инвертировать логику.
Если при обычном прохождении гриб может выпасть, а при публикации нет, то нужно доводить всё до абсолюта.
Вам нужно заставить гриб появиться, и тогда в обычном режиме всегда будет играть странный Марио, а во время публикации - обычный.
Именно так могла бы выглядеть целая «грибная ферма», которая заставила бы Марио собрать около 200 грибов (лимит — 100 блоков одного типа, но можно разместить 100 в основном мире и еще 100 — в дополнительном).
А вот пример «ловушки» для странного Марио.
Из-за более высокого прыжка он не сможет взять ветку слева и будет заперт до тех пор, пока не истечет таймер (если быть точным, там есть хитрая система бомб и препятствий, которые заставляют Марио прыгать выше, и для странному Марио этого достаточно, чтобы запереться, а нормальный просто активирует бомбу и может сбиться с курса).
Давайте соберем все вместе и подведем итоги:
- Очень хорошая попытка, которая с огромной вероятностью не позволит вам пройти игру в обычном режиме.
- И все же есть вероятность 13,4% (0,99^200 ~ 0,134, если учесть, что все генерируется с равномерной вероятностью), что странный гриб не выпадет, и уровень все равно будет пройден.
И даже если не равномерно, то вероятность все равно есть, и уровень потенциально еще можно пройти.
Попытка №4. Блоки с двойной сущностью
Помните первую картинку к этой статье? Я повторю:Этот уровень фактически был опубликован среди других уровней.
И возможно, оно будет опубликовано снова.
Nintendo хорошо поработала, придумав логику проверки уровней, но так было не всегда.
Когда игра только вышла, в ней были ошибки.
И если мы воспользуемся одним из них, мы сможем осуществить наши планы.
Сначала вам нужно стереть все данные на Wii U и установить Super Mario Maker v1.0. Это необходимо сделать в автономном режиме, чтобы игра не обновлялась.
И вы сможете играть в игру так, как она была на момент запуска.
Теперь нам нужно поговорить о блоках с двойной сущностью.
Это глюк, из-за которого блоки выглядели одним образом, а на самом деле выглядели совершенно по-другому.
Для его создания нужно было взять один из трёх типов блоков — монету, облако или сплошной непроходимый блок, разместить его на карте, а сверху разместить ещё один блок из того же набора, но перемещающийся по маршруту, и затем удалите маршрут (блоки с маршрутом изначально имеют небольшой путь).
Разместите сплошной блок с маршрутом в облаке.
Такие блоки схлопнутся и будут вести себя как исходный блок и выглядеть как наложенный.
Через некоторое время Nintendo это пропатчила, что сломало все уровни, использовавшие этот баг, потому что при ремонте фактически остались только наложенные из двойных блоков.
Блоки (1) только выглядят солидными, но логически это обычные монеты.
Как только такой уровень создан, нет необходимости сразу его публиковать.
Точнее, стоит попробовать – игра предложит пройти наш курс, что мы легко можем сделать.
Но отправить его на сервера не получится, так как у нас не включен интернет. Но уровень все равно будет помечен как пройденный и отправлен на серверы без дополнительных проверок.
Даже после обновления игры до последней версии.
В котором курс уже невозможно пройти.
Готовый! Вот он — нагруженный уровень, пройти который категорически невозможно ни при каких обстоятельствах.
С четвертой попытки успех был достигнут. На этом наше короткое путешествие в мир исследования игры Super Mario Maker завершается.
Заключение
Спасибо, что прочитали этот лист текста с картинками.Я постарался доходчиво рассказать о процессе поиска ошибок в логике приложения.
В данном случае это игра, но общие подходы остаются прежними, если их перенести на системное и прикладное ПО.
Код может быть написан хорошо, но это не значит, что все будет работать так, как задумано.
Логические уязвимости очень опасны и их трудно обнаружить, но именно это делает их интересными.
Всем хороших игр, уязвимостей и добра! Теги: #Игры и игровые приставки #уязвимости #Логические игры #Марио #игры для программистов #хотели лучшего #логические ошибки
-
Обзор Ноутбука Samsung Rf510-S02
19 Oct, 24 -
Чек-Лист Для Подготовки К Ux-Собеседованию
19 Oct, 24 -
Сканер Для Выявления Слабых Паролей В Субд
19 Oct, 24 -
Исследование Мобильного Jar-Трояна
19 Oct, 24