image

«Бум, бум, бум», стреляет дробовик, целясь… похоже, что в никуда? На земле лежит плазмаган, а справа летит призрак, но перед игроком нет врагов, а призрака хоть и можно убить, игрок в него не целится. И это мировой рекорд в Spelunky (сверяется со своими записями) по набору наибольшего количества денег? А часть, от которой люди в восторге, включает в себя стрельбу из дробовика в пустое пространство? Хм.


Очень немногие игры являются действительно решёнными, всегда есть чему научиться. Например, уже 33 лет люди пытаются добиться идеального скоростного прохождения первой Super Mario Bros. Но со временем планка поднимается всё выше, и чтобы преодолеть её, нужно всё больше и больше усилий. Движение вперёд состоит из рывков и открытий, дикого сочетания исследований и счастливых случайностей.

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

Оказывается, что в нём есть смысл. Объяснение сбивает с толку, похоже, это какие-то манипуляции с кодом, в которых всё ещё пытаются разобраться фанаты игры. Их обнаружили самопровозглашённые «учёные» Spelunky. Это живое свидетельство того, как расцвело сообщество Spelunky спустя семь лет после выхода игры на Xbox 360. Сиквел под названием Spelunky 2 выйдет в 2019 году, но тем временем Spelunky продолжает пожинать свои плоды.

Глитч это или нет, но даже разработчики игры впечатлены фанатской приверженностью делу.

«То, что сообществу Spelunky удалось сделать с игрой, намного превосходит то, что мы могли себе вообразить», — рассказывает дизайнер Дерек Ю в последнем эпизоде подкаста Spelunky Showlike. «Я не понимаю. По мне это уже перебор [смеётся] Это не имеет никакого смысла. Исследователи уже забрались в стратосферу, и мне их отсюда не видно. И это здорово».

Сцена мировых рекордов по сбору наибольшего количества денег в Spelunky безостановочно работает с 2013 года, новый рекорд ставится через каждые несколько месяцев. С лета 2016 года на сцене доминировал Kinnijup, один из богов Spelunky, снова и снова обгонявший собственные рекорды. (Не уроните челюсть от удивления, наблюдая за тем, как он расправляется с Spelunky на AGDQ в этом году.)

Не попадись на дублировании


Несколько лет назад сообщество обнаружило в Spelunky глитч с дублированием. Если положить драгоценности друг на друга и собрать их одновременно, то некоторые из них будут взяты дважды. Это особенно важно для прохождений на максимальный счёт (то есть деньги); глитч означает, что теоретически можно собрать больше денег, чем игра создала в мире, и открывает возможности новых мировых рекордов. Но глитч пока ещё не понят полностью, и его сложно воспроизвести. Всё, что знало сообщество — если ты соберёшь деньги в кучу, они иногда дублируются. В другие разы этого не происходит.

По словам изучающего Spelunky «учёного» ContraMuffin, в сообществе исповедовался принцип «сложи деньги в кучу и надейся на лучшее». В то время отношение к дублированию был противоречивым.

«Когда-то обсуждение дублирования было табуированным», — рассказывает игрок в Spelunky d_tea. «Это было большим преимуществом, но мы не знали, как оно работает».

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

Ещё один член сообщества по имени Spef заметил нечто странное: если повесить верёвку (инструмент для быстрого перемещения по миру игры), то глитч исчезает — дубликатов больше не появляется. Это намекало о том, что есть какие-то конкретные действия, которые могут повлиять на общий результат.

И затем началось настоящее тестирование.

«Мы приняли меры для того, чтобы наши тесты были неизменными и воспроизводимыми, даже несмотря на то, что мы пока не поняли, как делаются дубликаты», — рассказывает ContraMuffin. «Все мы имеем склонность к наукам, поэтому хорошо освоили научный метод. Совершая повторные опыты, мы быстро осознали, что дублирование — это неизменный и воспроизводимый процесс. Поэтому у него был какой-то паттерн, который нам пока не удалось найти».

Некоторые из тестов записывались на видео, и теперь помогают проиллюстрировать постепенный рост понимания.


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


(Это видео замедленно специально; ContraMuffin изучал игру кадр за кадром.)

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

«Мы начали называть этот порядок „первоочерёдностью“», — говорит ContraMuffin. «Сначала мы считали, что первоочерёдность заключалась в порядке рендеринга предметов, поэтому дали всему явлению название „дублирование рендеринга“».

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

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

Если положить предметы в кучу, то игра запутается, какие из них нужно удалять.


Допустим, вы сложили в кучу четыре драгоценности. Когда вы поднимаете их, они помечаются в коде игры на удаление. Но глитч приводит к тому, что удаляется только две драгоценности, а остальные сохраняются. То есть мы получили две дополнительных драгоценности!

Важно то, что глитч повторяется. Эти две «бонусные» драгоценности теперь помечаются на удаление, но снова срабатывает глитч и уничтожается только одна. То есть мы получили ещё одну лишнюю драгоценность. На этом этапе игра обрабатывает последнюю драгоценность, помечает её на удаление, и она наконец-то исчезает.

То есть мы «выжали» из четырёх драгоценностей семь.

Перерождение сообщества


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

Открытие сильно изменило и подход игроков к игре. В прошлом было почти не важно, куда падали деньги; важно было только то, чтобы поднять их. Теперь их расположение имело огромную важность, ведь для дублирования нужно перетащить деньги в одну кучу. Если деньги упали в странное место, откуда их нельзя вытащить, то возникает проблема. Каждый уровень превратился в головоломку.

Это объясняет, почему в видео в начале статьи игрок постоянно толкает деньги в кучи. Но это не объясняет, зачем он стреляет в пустоту из дробовика, а ведь именно из-за дробовика я и начал изучать эту тему.

Чтобы разобраться в этом, нам нужно пойти глубже. Гораздо глубже. Всё станет очень странным.

Комната, заполненная шумом


После уймы прогонов тестирования обнаружились и другие важные аспекты. Существование верёвки не препятствует дублированию, но слегка снижает его величину. Устранение верёвки позволяло глитчу дублирования обработать каждую драгоценность в куче. К тому же дело было не только в верёвках! Присутствие некоторых других вещей тоже влияло на дублирование, в то время как другие предметы вообще никак на него не воздействовали. Двое других учёных Spelunky, Dan и samcv, назвали этот неожиданный и странный эффект «шумом».

ContraMuffin и Spef, обнаружившие странное влияние верёвки, провели серию тестов с шумом, надеясь снизить его величину и повысить вероятность дублирования. Учёные обнаружили два вида шума: всеобщий и локальный. Предметы с всеобщим влиянием воздействуют на вероятность дублирования во всём уровне. Помните, что верёвка снижает вероятность дублирования? Она создаёт всеобщий шум! (Учёным даже удалось определить его количественное значение! Каждый тайл верёвки — это одна единица шума, а полная длина верёвки — это семь единиц шума.) Одни объекты, создающие всеобщий шум, можно уничтожить, другие можно подобрать, что по каким-то причинам устраняет создаваемый ими шум.

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

«Идея о том, что некоторые предметы должны были создаваться перед определёнными объектами, но после других объектов, кажется очень похожей на концепцию слоёв в цифровом искусстве и редактировании фотографий», — рассказывает ContraMuffin. «Поэтому я назвал эту концепцию „слоями“».

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

Важнее было понять не каждый слой, а осознать само их существование.

В Photoshop можно по желанию перемещать различные слои изображения. В Spelunky слои предопределены программистом, создавшим структуру кода игры. Но что, если бы существовал способ изменения логики игры и её слоёв из самой игры?

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

Секретный уровень City of Gold с кучей денег — это сокровищница Spelunky. В City of Gold так много денег, что критически важно максимально увеличить длительность нахождения в нём и количество дубликатов. Но по уровню бегают мумии, которые после смерти оставляют вместо себя бинты. Бинты мумий добавляют кучу шума, и очень важно то, что их невозможно уничтожить или поднять. Там, где есть шум, возникают проблемы с глитчем дублирования. Решение, как можно догадаться — это дробовик.

Почему?

История тысячи пуль


Однажды октябрьским вечером ContraMuffin традиционно тестировал убийство мумий и смотрел, что можно узнать о шуме, вызываемом бинтами мумий.

«Я тестировал убийство мумий из дробовика. И заметил нечто любопытное — если я стрелял в драгоценности в храме, то пули летели поверх них. При таком же раскладе в шахтах [ещё один уровень Spelunky] пули при пролёте мимо драгоценностей отрисовывались под ними».

ContraMuffin обнаружили способ манипулирования кодом Spelunky с помощью создания пуль в мире. Бум, бум, бум. Благодаря этому можно было менять слои видимости игры, как в Photoshop. Эту технику назвали «переключение вставок», с её помощью можно менять порядок приоритета отображения предметов, а значит и их дублирования. Она заставляет слои перемещаться вниз и вверх.

«Мы можем выбирать, какие предметы будут дублироваться, а какие использоваться в качестве шума», — говорит он.

Чтобы переключение вставок сработало, необходимо создать 1000 объектов, а при стрельбе из дробовика создаются новые объекты. (Вот хороший пост Twitter, в котором объясняются технические подробности.

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

«По сути, мы хотим, чтобы драгоценности имели больший приоритет дублирования, чем бинты мумий», — рассказывает игрок в Spelunky d_tea, втянувший меня в игру. «То есть когда пули находятся перед пушкой, то всё создаваемое на уровне имеет меньший приоритет, а когда пули оказываются под пушкой, то всё создаётся с наивысшим приоритетом».

Вуаля.

Вот почему игрок постоянно стреляет из дробовика. Он перемещает слои Spelunky, и повышает приоритет дублируемых предметов, обеспечивая их максимальную стоимость. Загадка решена.

Первый рекорд прохождения Spelunky на максимальное количество очков был установлен 2 февраля 2013 года игроком vardulon, он набрал $2 126 925. Постепенно с течением дней, месяцев и лет значения становились больше. Но это было медленное, методичное движение игроков, раз за разом улучшавших идеальный результат. За последние несколько месяцев на сцене произошли взрывные изменения, и хотя бог Spelunky Kinnijup поставил большинство новых рекордов — недавно он достиг $5 534 700, другие игроки почувствовали новые возможности, и эта часть сообщества стала самой активной и конкурентной.

Пока я писал эту статью, мировой рекорд перешёл от d_tea к Kinnijup, и я не удивлюсь, если его снова побьют.

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

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

Всё это напомнило мне об открытии 2016 года — знаменитом «половинном нажатии на A» в Super Mario 64, когда мозги множества людей (в том числе и мои) буквально взорвались от подробного объяснения нюансов высокоуровневой игры. Честно говоря, когда я пересматриваю это видео, у меня кружится голова. Но людей взбесила концепция «половинных нажатий на A» ещё и потому, что они не осознают, какой объём исследовательской работы необходим для понимания их любимых игр. Super Mario 64 по-прежнему остаётся нерешённой.

Людям привычно увлекаться «очередной крутой игрой», ведь она такая восхитительная и новая. Но игры — это странные создания, это идеи, склеенные друг с другом изолентой. Даже после титров в конце они могут многому нас научить, и тогда за работу берутся люди наподобие учёных Spelunky. Понимание того, что в новых играх является особым и интересным — это только самое начало пути.

Комментарии (33)


  1. ProRunner
    12.12.2018 11:02

    Это тот случай когда это уже не баг, это фича


    1. Atos
      12.12.2018 12:29
      +2

      Вспоминаются «Могильные герои» — стратегический приём, открытый в Heroes of Might and Magic 4, когда герой убивается, и его могилку можно далеко перетаскивать в течении хода, воскрешая в городе, благодаря чему ставились ошеломительные рекорды по спидрану карт…


      1. Mimizavr
        12.12.2018 14:43
        +2

        4 HOMM — вообще рекордсмен по всякого рода извращениям стратегическим приёмам: и прочёсывание карт одиночными юнитами, и двойная прокачка героев и много чего ещё.


  1. tretyakovpe
    12.12.2018 12:01

    Мы называли/ем это «задротством».


  1. netricks
    12.12.2018 12:51
    +11

    Примерно так мы однажды поймём, что живём в симуляции.

    — Зачем тот чувак дует на персики?
    — А? Это наш колдун-практикант. Он переставляет местами слои мира, чтобы повысить равномерность распределения примесей в стальных отливках в цехе на первом этаже.


  1. netricks
    12.12.2018 12:53
    +1

    П.С. Warhammer 40000 dawn of war, надо разведчиком тау надо было снимать флаг, находясь от него с западной стороны. Тогда разведчик оставался невидимым…


  1. dark46
    12.12.2018 13:08
    +9

    Всегда поражало непреодолимое упорство некоторых людей стать лучшими в абсолютно бесполезных сферах жизни :)


    1. anti4ek
      12.12.2018 13:46
      +3

      Это называется хобби. Некоторым оно заменило религию.


      1. vlreshet
        13.12.2018 10:18
        +1

        И, к счастью, ещё ни один террорист не взорвал самолёт с криками «Все должны клеить марки! Смерть геймерам!»


        1. anti4ek
          13.12.2018 12:04

          Можно считать религию разновидностью хобби:)


  1. Hardcoin
    12.12.2018 13:36
    +2

    Учёные Spelunky. Интересна тяга людей к выяснению, как всё устроено. Это не смотря на то, что это "устроено" сделали другие люди. Человечество рискует зациклиться — одни создают "законы природы" в виде багов, другие изучают )


    1. eugenius_nsk
      12.12.2018 14:48

      Думаете, законы реального мира — это тоже баги? Что там говорили насчёт того, что вероятность существования нашей вселенной именно с такими законами и базовыми константами мизерно мала?


      1. Arris
        12.12.2018 16:26

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

        Ну и существует собственно, раз вы это читаете ;)


      1. rkfg
        12.12.2018 16:26

        вероятность существования нашей вселенной именно с такими законами и базовыми константами мизерно мала

        Так это не имеет значения, когда событие (возникновение Вселенной) уже произошло, и мы уже есть в ней. Может, до этой Вселенной ещё квинтиллионы других появились и коллапсировали обратно в сингулярность из-за несбалансированных законов, этого ведь никто не знает. Грубая аналогия: бросаем кубик, на нём выпадает, допустим, двойка. Поражаемся, что выпала двойка, ведь вероятность этого всего лишь 1/6.


        1. sim31r
          12.12.2018 21:20

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


          1. rkfg
            12.12.2018 21:31

            Это верно, как и то, что наше существование, по сути, просто одна из форм организации материи. И наверняка не самая оптимальная. Так что наша Вселенная может в итоге порваться, а чёрные дыры — породить другие вселенные, где всё будет иначе, и где-то в них может появиться более удачная жизнь, которая так же будет удивляться, насколько точно совпали параметры. А в квадриллионах других вселенных ничего не появится, и никто не удивится. Обычный антропный принцип.


        1. Captcha
          13.12.2018 00:33

          Вы только что описали «антропоморфный принцип».


          1. MTyrz
            13.12.2018 19:58
            +1

            Я очень извиняюсь, но все же антропный.
            А «антропоморфный» — это «похожий на человека»; доводя до некоторой крайности — «человекообразный».


            1. Captcha
              13.12.2018 20:00
              +1

              Конечно же.


      1. Hardcoin
        13.12.2018 23:33

        Некоторые законы на баги очень сильно похожи. Особенно квантовые.


        1. netricks
          14.12.2018 17:16

          Не баги, а особенности реализации.


  1. achekalin
    12.12.2018 16:31

    Когда коту нечего делать, они лижет свои находит себе занятие.

    «Ученые», разбирающиеся, как причудливо баги и фичи накладываются друг на друга… А ведь в этом можно найти смысл, философию и вообще все, что угодно!

    «Маятника Фуко» на них нет!


  1. Fragster
    12.12.2018 17:10
    -1

    И все из-за разработчиков, которые не знают, что нельзя менять массив в процессе обхода через foreach. Предполагаю, что там что-то типа того:

    let arr = [1,2,3,4];
    
    arr.forEach(function(item, i, arr) {
      arr.splice(i,1);
    });
    
    console.log(arr);

    Ошибка, конечно, распространенная, но только среди джунов.


    1. true_id1
      12.12.2018 18:47

      Незнаком с конкретным багом. Но предполагаю что ваше предположение далеко от истины. Большинство подобных багов/фич работает из-за странного сочетания кода, а не из-за одного конкретного места. Собственно сообщество спидранеров как раз обычно ищет так называемые «стратегии» которые в основном заключаются в максимальном извращением над движком. Один спидран GTA:VC чего стоит хз как до такого додумываются.


      1. Fragster
        12.12.2018 18:51

        Допустим, вы сложили в кучу четыре драгоценности. Когда вы поднимаете их, они помечаются в коде игры на удаление. Но глитч приводит к тому, что удаляется только две драгоценности, а остальные сохраняются. То есть мы получили две дополнительных драгоценности!

        Важно то, что глитч повторяется. Эти две «бонусные» драгоценности теперь помечаются на удаление, но снова срабатывает глитч и уничтожается только одна. То есть мы получили ещё одну лишнюю драгоценность. На этом этапе игра обрабатывает последнюю драгоценность, помечает её на удаление, и она наконец-то исчезает.

        То есть мы «выжали» из четырёх драгоценностей семь.


        1. Zoolander
          12.12.2018 23:31

          я недавно встречался с таким багом. Его отличие от описанного в статье в том, что он повторяется постоянно и это сразу ломает идею. Такое даже не всегда доходит до внутренних тестеров, не говоря уже о «спеланки-ученых» ))

          нет, там что-то более сложно, как правильно заметили выше, сочетание нескольких факторов.


    1. bro-dev0
      12.12.2018 19:20

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


  1. Sap_ru
    12.12.2018 18:46
    +1

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


  1. perfect_genius
    12.12.2018 20:40
    +4

    Вот как выглядит переключение слоёв:


  1. gohan
    13.12.2018 01:25

    Я в Spelunky HD наиграл тоже какое-то безумное время, так как игра слишком хороша. Рекорды ставить не пытался. Просто проходил сначала, потом проходил с уровнями ада и секретным боссом. Потом брал ачивки для развлечения, там самая муторная была — пройти с нулём денег. Самый забавный встреченный баг — выпадение инопланетянина из горшка на одном из уровней пещер (1-4), когда «теоретически» эти враги встречаются только на 9-12 уровнях. Возможно, это специально встроенная очень низкая вероятность выпадения, но меня прилично удивило.

    Если выпустят продолжение на Switch, то будет очень круто.


  1. demondeimos
    13.12.2018 08:36
    -2

    Ученые)) сейчас где-то ржот Хокинг попивая кальвадос Циалковским и Менделеевым. Причем кальвадос сделан Менделеевым из того самого, запретного, сорта яблочек)))
    Ученые.
    Люди тратят свою жизнь на то, чтобы найти смысл в кучке кода, который не делает ничего полезного, кроме того, что дает прибыль людям, которые его написали.
    В котором один единственный смысл — это развлечение.
    В целом, это просто наркомания ведь. Одна из. Просто цифровая.
    Бесполезное, бездарное времяпрепровождение наполняется высосанным из пальца смыслом.


    1. keydet
      13.12.2018 09:32

      Учитывая диаметрально противоположные взгляды на релятивизм у Циолковского и Хоакинга, несколько глуповато их ставить в один ряд.


      1. demondeimos
        13.12.2018 09:37

        Учитывая, что вы не понимаете сарказма, то выделываться тут действительно несколько глуповато.