Как стать автором
Обновить

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

Время на прочтение 8 мин
Количество просмотров 17K
Всего голосов 32: ↑32 и ↓0 +32
Комментарии 25

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

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

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

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


=== 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 ]
Главная фича Ink, на мой взгляд, в том, что это встраиваемый движок. Внешний код (на С#, JS или другом языке, под который ink портирован) может передавать данные внутрь Ink-движка и вызывать там функции, и наоборот, ink-код может дергать какие-то внешние функции, проброшенные разработчиком. Например, их игра Heaven's Vault — это по сути графический квест, но все диалоги и сюжетные события реализованы в Ink.

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

Тем более, что renpy поддерживает весьма сложную логику и интерактивность.

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


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

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

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


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


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

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

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

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

Кстати, у Джона Ингольда, одного из авторов этого самого 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
А есть что нибуть под мобайл?

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

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

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

Зарегистрируйтесь на Хабре , чтобы оставить комментарий