company_banner

Ink: инструмент для создания текстовых квестов как из лучших воспоминаний детства



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

    В сравнении с историей литературы этот жанр совсем молодой, зародился в середине прошлого века в виде экспериментов, их даже пробовали использовать для геймификации образования. Расцвет жанра пришелся на 70-е годы. Поначалу интерактивность была довольно условной, с простым ветвлением; читатель всего лишь выбирал варианты развития сюжета в духе: «А что если...». Тем не менее, некоторые серии были чрезвычайно популярны. Одна из них, под названием «Выбери себе приключение», издавалась почти 10 лет (с 1979 по 1988). Книги серии переводились на множество языков, включая и русский.

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


    Игра запущенная на DPD-10

    Компьютер дал подобным играм второе рождение. Первый текстовый квест Colossal Cave Adventure был написан на фортране в 1975 году и работал на мейнфрейме PDP-10. Уже тогда рабочие компьютеры использовались как средство развлечения за счет начальства. Создатель игры, Уильям Краудер, был не только программистом, но и спелеологом, потому сюжет был о поиске сокровищ в пещере, у которой был реальный прототип — Мамонтова пещера в американском штате Кентукки. Она знаменита тем, что является самой длинной в мире (общая длина исследованных проходов больше 500 километров); есть где спрятать сокровища! 

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


    Одно из реальных мест в пещере, описываемое в игре.

    Программа выступала в роли гейм-мастера, описывая окружение локации, куда попал игрок, с юмором комментируя его действия и храня список предметов, которые находятся в инвентаре. Текст, который писала программа, выводился большими буквами, действия игрока — маленькими. Игра относится к тому типу, в котором для управления требуется вводить короткие команды из двух-трех слов.

    ВЫ СТОИТЕ В КОНЦЕ ДОРОГИ ПЕРЕД НЕБОЛЬШИМ КИРПИЧНЫМ ЗДАНИЕМ.

    ВОКРУГ ВАС ЛЕС. НЕБОЛЬШОЙ РУЧЕЙ ВЫХОДИТ ИЗ ЗДАНИЯ И СПУСКАЕТСЯ В ОВРАГ.

    иди на юг

    ВЫ НАХОДИТЕСЬ В ДОЛИНЕ В ЛЕСНОЙ ДОЛИНЕ, РЯДОМ С РУЧЬЕМ, КОТОРЫЙ СТРУИТСЯ ПО КАМЕННОМУ ДНУ.

    Формального сюжета и конкретной цели не существует. У игрока есть три жизни, которых ему должно хватить, чтобы набрать 350 очков, необходимых для выигрыша. Очки выдавались за исследования пещеры и найденные сокровища. Первоначально в игре было 66 локаций, количество которых увеличивалось с каждой следующей версией. Позже развитием игры занялся Дон Вудс, который тогда был аспирантом в Стэнфордском университете. Под его началом в следующей версии количество локаций расширилось до 140. Однако Дон никогда не был в Мамонтовой пещере, и добавленные им локации уже не совпадают с реальностью. 

    В 1977 году James Gillogly впервые портировал игру на другую систему, а именно на Unix. Что любопытно, этот порт до сих пор входит в состав некоторых дистрибутивов, а если его нет, то можно установить в составе репозитория bsdgames (или отдельно) и играть даже на VPS через SSH.

    Установка и запуск игры на Ubuntu
    $ sudo apt install colossal-cave-adventure                                                                                      …
    
    $ adventure                                                                                                                     WELCOME TO ADVENTURE!!  WOULD YOU LIKE INSTRUCTIONS?                                                                                                                                                                                                                                    > yes                                                                                                                                       SOMEWHERE NEARBY IS COLOSSAL CAVE, WHERE OTHERS HAVE FOUND FORTUNES IN                                                                      TREASURE AND GOLD, THOUGH IT IS RUMORED THAT SOME WHO ENTER ARE NEVER                                                                       SEEN AGAIN.  MAGIC IS SAID TO WORK IN THE CAVE.  I WILL BE YOUR EYES                                                                        AND HANDS.  DIRECT ME WITH COMMANDS OF 1 OR 2 WORDS.  I SHOULD WARN                                                                         YOU THAT I LOOK AT ONLY THE FIRST FIVE LETTERS OF EACH WORD, SO YOU'LL                                                                      HAVE TO ENTER «NORTHEAST» AS «NE» TO DISTINGUISH IT FROM «NORTH».                                                                           (SHOULD YOU GET STUCK, TYPE «HELP» FOR SOME GENERAL HINTS.  FOR INFOR-                                                                      MATION ON HOW TO END YOUR ADVENTURE, ETC., TYPE «INFO».)                                                                                                                  — - -                                                                                                         THIS PROGRAM WAS ORIGINALLY DEVELOPED BY WILLIE CROWTHER.  MOST OF THE                                                                      FEATURES OF THE CURRENT PROGRAM WERE ADDED BY DON WOODS (DON @ SU-AI).                                                                      CONTACT DON IF YOU HAVE ANY QUESTIONS, COMMENTS, ETC.                                                                                                                                                                                                                                   YOU ARE STANDING AT THE END OF A ROAD BEFORE A SMALL BRICK BUILDING.                                                                        AROUND YOU IS A FOREST.  A SMALL STREAM FLOWS OUT OF THE BUILDING AND                                                                       DOWN A GULLY.                                                                                                                                                                                                                                                                           >  
    

    Так как Дон активно распространял исходный код своей версии, то это способствовало росту ее популярности и тому, что она портировалась на каждую новую платформу: Apple, Commodore и, конечно же, MS-DOS.

    Версия для MS-DOS была уже с простейшей графикой, содержала 130 локаций, 15 видов сокровищ, 40 предметов для инвентаря и 12 задач, которые требовалось решить по мере прохождения.


    Игра на MS-DOS

    В 1985 году Дэйв Платт выпустил свою версию игры, где надо было набрать уже 550 очков, но которая кардинально отличалась подходом к программированию таких игр. Он создал универсальный язык написания сценариев «A-code», который обрабатывался движком написанным на  FORTRAN 77. Это позволило очень легко делать модификации игры и создавать другие текстовые приключения. Практически все современные игры создаются подобным образом, на специальном языке разметки, который интерпретируется движком, как универсальным, в который можно загружать самые разные игры, так и проприетарным, выдающим исполняемый файл, который можно продавать в онлайн-магазинах.

    Приключение Colossal Cave Adventure было родоначальником жанра и надолго сформировало каноны подобных квестов, а так же очень сильно повлияло развитие ролевых игр, в том числе и многопользовательских. Жанр MUD создавался по образу и подобию CCA. Даже Дональд Кнут не обошел вниманием эту игру и написал небольшую книгу, посвященную анализу кода игры в обучающих целях.

    CCA является настоящим долгожителем. Дон Вудс продолжал выпускать обновления вплоть до середины 90-х, а в 2017 году Эрик Реймонд взял версию игры Дона от 1995 года, отладил ее, чтобы она запускалась на современных компьютерах, и выложил код на своей странице. Существует порт игры на Андроид и переводы ее на русский язык. Поиграть в один из приведенных вариантов можно на сайте Русский Информ, платформе для создания подобных текстовых игр. Можно играть как онлайн, так и скачав файл для движка Windows Frotz.


    CCA на Windows Frotz

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

    В 2011 году пара разработчиков из Кембриджа занялась производством интерактивных текстовых квестов и придумала средство для упрощения своей работы — Inklewriter. Год спустя они представили его в виде сайта, который позиционировался как простое средство для обучения программированию и создания интерактивной литературы. Его даже использовали в школах и удостоили награды «Best Website for Teaching and Learning» от Американской ассоциации школьных библиотек. Спустя несколько лет разработчики были вынуждены закрыть его по причине нехватки времени на его поддержку, но открыли код своего инструмента для работы (позже они его перезапустили). Ink получил возможность интеграции с Unity, и с его помощью стало возможно с легкостью создавать интерактивные истории, сочетающие в себе не только текст с рисунками, но и музыку с анимацией. Он был взят на вооружение и другими крупными инди-студиями разработки игр, а сама Inklestudios выпустила несколько успешных игр для разных платформ: ссылка. Игры очень милые, другого слова не подобрать. Им удалось заполучить в команду талантливого художника Anastasia Wyatt, что замечательно рисует. 


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

    Проект Inkle состоит из двух частей: руководство по языку разметки ink; IDE для работы с ним — Inky. Начать писать интерактивную историю очень просто. В Inky два окна: слева текст сценария, справа его интерпретация


    Начнем новый сценарий: File → New Project. Вставим в редактор следующий пример и сохраним в отдельную директорию: File → Save Project. 

    Текст сценария
    Лондон, 1872
    Резиденция месье Филеаса Фога
    
    -> london
    
    === london ===
    Месье Филеас Фогг рано вернулся домой из Реформаторского клуба, да к тому же в новомодном паровом экипаже!
    
    Паспарту, – сказал он. – Мы едем вокруг света!
    
    + Вокруг света, месье?
        Я был крайне удивлен. 
        -> astonished
    + [Кивнуть] -> nod
    
    === astonished ===
    Вы шутите! – ответил я с достоинством. – Вы смеетесь надо мной, месье.
    Я совершенно серьезен.
    
    + Как скажете, месье.
        -> ending
    
    === nod ===
    Я кивнул, не веря ни одному его слову.
    -> ending
    
    === ending
    Мы совершим кругосветное плавание за восемьдесят дней. – Он был совершенно спокоен, когда предложил этот дикий план. – Через час, в 8.25, мы вылетаем в Париж. 
    -> END
    


    На приведенном фрагменте очень простая структура:

    • тройными знаками «=» обозначены «Узлы» (в терминологии Ink), метки для перехода;
    • переход по ним осуществляется с помощью оператора «->»«-»;
    • пункты выбора обозначаются оператором «+»;
    • квадратные скобки сообщают интерпретатору, что после выбора название пункта не надо отображать в диалоге;
    • END» — оператор окончания текста.

    Интерпретация всегда идет сверху вниз. Если повествование разделено на узлы, в начале следует сделать переход на основной поток: «-> london»

    История готова, но выглядит довольно скучно. Добавим в нее изображение. Для этого используется тег «# IMAGE».

    # IMAGE: days-poster-promo.jpg

    Наглядно

     Картинка должна лежать там же, где файлы экспортированные для интернета. После внесения изменений экспортировать достаточно один файл: File → Export story.js only, остальные содержат шаблона, в который помещается история.

    Написав историю, можно экспортировать ее в интернет: File → Export for web. В директории проекта появятся несколько файлов: HTML-страница; стилевое оформление в CSS; файл движка ink.js; наш сценарий 80d.js (не редактируйте его напрямую); main.js, где описывается поведение сценария. Если вы знаете CSS, то вам не составит труда отредактировать внешнее оформление истории. 

    Закончив оформление, историю можно выложить в интернет. Авторы Ink рекомендуют воспользоваться порталом itch.io. Это бесплатный портал с простой регистрацией. При создании проекта для Ink выберите «Kind of project» HTML, загрузите архив с файлами проекта и отметьте опцию «This file will be played in the browser». Можно посмотреть, что получилось: ruvds.itch.io/inky-test.

    Если вам в свое время тоже хотелось дополнить текстовые квесты «Рейнджеров» или написать свой текстовый квест, то не стоит сдерживать свою фантазию — дерзайте вместе с Inky!

    RUVDS.com
    VDS/VPS-хостинг. Скидка 10% по коду HABR

    Комментарии 25

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

      А пока все слишком просто и напоминает литературный квест, где от выбора зависит только на какую страницу попадешь.
        +1

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


        === function changingOfTheGuard 
            {!GuardsOnDuty: // "is GuardsOnDuty empty right now?"
                ~ GuardsOnDuty = LIST_ALL(Smith)
            - else:
                ~ GuardsOnDuty = LIST_INVERT(GuardsOnDuty)
            }

        LIST ChargeState = uncharged, charging, charged
        
        VAR PhoneState = (off, uncharged)
        
        *   {PhoneState !? uncharged } [Plug in phone]
            ~ PhoneState -= LIST_ALL(ChargeState)
            ~ PhoneState += charging
            You plug the phone into charge.
        *   { PhoneState ? (on, charged) } [ Call my mother ]
          0
          Главная фича Ink, на мой взгляд, в том, что это встраиваемый движок. Внешний код (на С#, JS или другом языке, под который ink портирован) может передавать данные внутрь Ink-движка и вызывать там функции, и наоборот, ink-код может дергать какие-то внешние функции, проброшенные разработчиком. Например, их игра Heaven's Vault — это по сути графический квест, но все диалоги и сюжетные события реализованы в Ink.
        +2

        Пример уж слишком примитвиный и даже не описаны возможности движка.
        Если хотите писать текстовые квесты рекомендую посмотреть на renpy — движок с большим сообществом, на котором довольно просто написать тектосвый квест/визуальную новеллу. Можно добавлять код на python

        +2

        Тема интерактивной литературы, на самом деле, весьма обширна, и русское сообщество тут не исключение. И движков много, и сайты тематические есть.


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

        0
        Проблема всех этих языков разметки в их англоязычном происхождении. Как следствие, значительная часть разметочных символов не может быть введена в русской раскладке (квадратные и угловые скобочки, к примеру).
        И дико раздражает, когда при печати текста буквально через слово туда-сюда раскладку переключать приходится.
        Проблема непосредственно самопальных IDE этих текстовых квестов — они хорошо работают на приключениях уровня Hello World, которые создаются одним человеком за выходные, но откровенно плохи там, где у вас количество текста переваливает за мегабайт. Потому что банально начинаются проблемы с навигацией и ориентированием в этой текстовой куче. Нужно, как минимум, тегирование текстовых фрагментов (с фильтрацией по тегам), всплывающие подсказки при подстановке ссылок, проверка корректности всех имеющихся ссылок (и поиск висячих фрагментов, на которые ничего не ссылается), элементы рефакторинга (начиная с банального переименования текстового фрагмента) плюс поддержка нескольких языков, когда указывается, какие фрагменты всё ещё не переведены.
          0

          Проблема с раскладкой решается на уровне системы (на маке 99% можно ввести без переключения используя option). На Винде я в свое время биндил на определенные сочетания клавиш ручками пол клавиатуры — когда верстаешь страничку в html переключаться приходятся мама не горюй сколько.


          Второй вопрос решается комментами в собственной нотации типа // TODO — check state #someday #scenario-line-1-18 и поиск по ним. Если учесть что это тестовый файл то можно в нем работать и в VSCode и тогда вся сила самописных скриптов вам в помощь.


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

            0
            Собственно, это как раз тоже отвратительно — по умолчанию нужен штатный верстальщик.

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

            //Лично моему мозгу ГОРАЗДО удобнее работать с такими вещами (когда много реплик, ветвлений, переходов...) вообще не в сплошном поле и само собой отнюдь не в картинках (пузыри со стрелками), а в таблицах. Свойства, адреса вариативных переходов, опции — все в отдельных столбиках. А в текстовых — ничего, кроме текста.//
            0
            Помимо биндингов и альтернативных раскладок можно просто самому придумать комбинацию, по которой потом пройтись заменой по всему тексту. Например я ставлю -= вместо [, =- вместо ] и то же с шифтом: _+ вместо {. По времени выходит быстрее, чем переключать раскладку по два раза.
            0
            Ink — довольно примитивный, Twine-подобный формат, в нем ничего особенно интересного.
            Тема текстовых парсеров (Z-machine, Glulx, TADS, Hugo etc.) не раскрыта, несмотря на то, что именно на них пишут такие столпы IF как Andrew Plotkin, Emily Short и т.д.
              0
              Парсерная ИЛ, к сожалению, всё больше уходит в прошлое. На конкурсе IFComp, где изначально были исключительно парсерные игры, сейчас парсеров в лучшем случае четверть.
              Эмили Шорт написала об этом хорошую статью, кстати: ifhub.club/2018/01/18/ischezayuschee-iskusstvo-parsernoy-il.html
                0
                Это, возможно, действительно так, но лишь потому что гипертекстовые IF имеют куда более низкий технический порог входа, по сути превращая текстовую адвенчуру в подобие визуальной новеллы.
                К тому же, именно игры с текстовым (хоть и зачастую ограниченным) парсером до сих пор выигрывают XYZZY Awards за самые интересные идеи в IF (Eat Me, The Wizard Sniffer, Toby's Nose, TAKE, Subrosa и т.д).
                  0
                  Моя не-парсерная игра взяла XYZZY Award за Best use of innovations, так что аргумент так себе :) И если посмотреть XYZZY Award 2018, там парсерные игры взяли только Best Puzzles, Best Individual PC и Best Implementation.
                  Ну и наконец, в прошлом году не-парсерная игра впервые взяла 1 место на IFComp (справедливости ради — разделив его с парсерной, поскольку набрали одинаковое количество баллов)
                    0
                    Я немного предвзято отношусь к не-парсерным IF, несмотря на то, что я вырос на Космических Рейнджерах, в основном потому что в не-парсерных IF само наличие ссылки/кнопки невольно выдает ответ на загадки.
                    Например, Spider and Web не была бы и вполовину столь гениальна, если бы она не была написана на парсере (несмотря на то, что там парсер, честно говоря, весьма неуклюжий).
                      0
                      Понимаю. И да, я согласен с тем, что есть множество гениальных парсерных игр, которые возможны исключительно в виде парсера. Но тем не менее, сейчас этот жанр переживает не лучшие времена, что поделать.

                      Кстати, у Джона Ингольда, одного из авторов этого самого Ink, есть интересная статья с провокационным заявлением, что парсерные игры — лишь прототипы для игр не-парсерных :) И да, Джон тоже когда-то писал парсерные игры, и весьма неплохие (XYZZY Award 2001 за Best Game, Best Story и Best Setting)
                      threeedgedsword.wordpress.com/2013/12/05/parser-as-prototype-why-choice-based-games-are-more-interesting
              0
              А есть что нибуть под мобайл?
                0

                Z-machine и игры под нее

                  +1
                  тот же INSTEAD
                  0
                  Мне кажется, что программисту (начинающему программисту) будет интереснее написать свой движок для текстовых игр, в которые он сможет добавлять любые свои хотелки, а не ограничиваясь лишь тем функционалом, который заложил другой разработчик.
                    0
                    Ink — встраиваемый язык. На нём пишут исключительно сюжетную часть игры, а вокруг можно наворотить движок любой сложности, хоть графический, хоть VR :) Студия inkle делала и обычные текстовые игры, и графический квест, и пошаговую стратегию — но в основе этих игр всё равно лежит Ink, который отвечает за сюжетные ветки и диалоги.
                    0
                    Инкл довольно-таки примитивный.
                    Если вдруг кому нужно решение для задач посложнее и с интеграцией с юнити, мне вот понравился Articy: Draft. Он довольно гибкий
                      0

                      Кстати говоря, в Fallout (2) диалоги тоже пишутся таким же образом — это просто скрипт, вызывающий функции node (для реплик NPC) и функции option (для вариантов ответов).

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

                      Самое читаемое