Капсулы. Oтчет разработчика

ВНИМАНИЕ! Текст может содержать прямые или косвенные спойлеры к проектам “Капсулы” и “Циклодол”, которые выполнены в жанре CYOA.

Поделюсь ощущениями, переживаниями и небольшим количеством фактов. Оба проекта в чем-то связаны друг с другом и могут считаться частями некой серии. Объединены они в числе прочего такой вещью как Twine. Считаю эти работы наиболее цельными и продуманными из всех моих опусов. Это не исключает того, что они суть явление стёба, дурачества и цифрового хулиганства. И они же — плод переживания кризиса моего восприятия ифни в целом. “В этой игре не будет ни графики, ни музыки, ни спецэффектов, но только слова и сила вашего воображения” Choice of Games.

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

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

О кнопке “далее”. В Циклодоле, а следом и в Капсулах я сознательно избегаю такой кнопки. Точнее, самого этого слова, которое разрывает повествование, на мой взгляд, грубым техническим образом. Все, что угодно, только не “далее”. Для меня она уместна только, как своего рода мем.

О характерном и общем в Капсулах и Циклодоле. Повествование ведется от первого лица вымышленного главного героя. Самый простой и почти беспроигрышный вариант для некоторого ряда идей. Не нужно ломать голову жонглируя именами, эпитетами, титулами и местоимениями, когда пишешь локацию или параграф. Минус все же есть, иногда у читателей может возникать привязка автора и ГГ. Как будто идут слова автора, а на самом деле на 99% это не так.

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

Пунктуация используется часто не по правилам русского языка, а в моих корыстных целях. Чтобы разрывать серии мазков, когда нужно. Иногда текст чем-то напоминает по стилю телефонную переписку. На Капсулах сказывается мобильно-ориентированность, я уже делился в Дискорде, что 100% всех текстов проекта набраны пальцем на смартфоне и всего 20 минут ушло на то, чтобы на ПК закодировать все в Twine. Так как обе игры подавались на ЗОК, к их карточкам требовались картинки, я каждый раз для этого выбирал из сети самый придурковатый мем. Тоже своего рода “марка” серии.

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

Скажу несколько слов о сюжете Капсул. В игре три ветки. Удивительное совпадение, на этом ЗОК есть игра Дитя Средневековья и одного из персонажей как и у меня тоже зовут Хельга! Ну так вот, что у меня в игре по сюжету. Муж Хельги бьёт главного героя при любом из раскладов, такова симметрия. Одно из возможных рабочих названий игры было Циклодол-2, оно вложено намеком в один из начальных параграфов. Хотя все события и персонажи на 99% вымышлены, но 1% реальности все же заложен, то что я видел сам или пересказал истории от других людей. Хельгу звали Ольга, девица около 35 лет, описана с натуры. Ее муж работал в той же фирме, что и она. И да, Ольга там больше не работает…

P.S. Очень печально, что с нами нет Техникса (techniX), мне его действительно не хватает. Автор, мыслитель, переводчик, игрок и просто хороший собеседник. Злая судьба развела наши пути. И я понимаю, что это уже навсегда. Да, кстати, именно он, будучи членом жюри ЗОК, написал самый толковый отзыв на игру Циклодол.
Страница движка Twine

qSpider 1.1.0

Вышла новая версия qSpider — 1.1.0.

Новые фичи:
— standalone сборка игры (плеер без полки игр и загрузкой игры из конфига)
— в online версию добавлена возможность использовать ссылку на игру из каталога
— улучшено отображение горячих клавиш в меню паузы (вместо meta теперь отображается название клавиши в зависимости от платформы (Ctrl на Window и ⌘ на Mac)

Список исправлений:
— исправлена работа savegame/opengame команд и их работа при nosave=1
— исправлен запуск aero игр в десктоп версии
— исправлена работа тега center в названии действий, предметов и пунктов меню
— исправлена поддержка загрузки лейаута из qspgui.cfg
— исправлено закрытие view панели
— исправлена поддержка кирилицы в названии файлов внутри zip архивов созданных в Windows
— исправлено падение плеера если горячая клавиша была нажата при открытом msg/input
— исправлено сохранение по имени (savegame '1') в десктоп версии
— исправлена поддержка gt без пробелов вокруг (&‌gt'loc') внутри ссылок

Ссылки на игры из каталога в online версии
Теперь к ссылке на онлайн версию можно добавить параметр catalogId.
Например https://qspfoundation.github.io/qspider/?catalogId=125 — игра сказочка на ночь
Если игры еще нет на полке — она будет автоматически добавлена.
Когда игра на полке — она будет запущена.
Соотвествующий id можно взять из ссылки на qsp каталог — qsp.org/index.php?option=com_sobi2&sobi2Task=sobi2Details&sobi2Id=126&Itemid=55
необходимо взять значение параметра sobi2Id (126 в примере)

Standalone версия плеера

Для тех кто хочет опубликовать свою игру онлайн без полки игр или же собрать desktop версию своей игры была добавлена standalone версия плеера (без полки игр и загрузкой игры из файла конфига).

Особенности standalone сборки:
  • если в файле конфига описано несколько игр — будет запущена первая из списка
  • не поддерживаются архивы игр — их надо распаковать

В релиз теперь включается архив с standalone версией — qspider-player-standalone.zip
Игру вместе с файлом конфига game.cfg необходимо поместить в папку game.
После этого игру вместе с плеером можно публиковать online.

Для создания desktop версии игры подготовлен шаблон репозитория с необходимыми скриптами для сборки. Будет необходим аккаунт на github.com и минимальные навыки работы с git.

Создание репозитория
  • заходим в репозиторий https://github.com/QSPFoundation/qspider-standalone-game-template
  • в правом верхнем углу нажимаем Use this template и Create a new repository
  • обязательно отмечаем Include all branches
  • вводим название репозитория, выбираем public (необходимо для использования Github Pages для онлайн версии и файла автоапдейтов)
  • создаем репозиторий

Добавление файлов игры и минимальные настройки для online публикации
  • клонируем репозиторий
  • копируем файлы игры в папку репозитория (в дальнейшем лучше разработку вести в ней)
  • если у игры не было game.cfg файла — заполняем пустой файл из репозитория, указывая id, название и путь к qsp(или qsps) файлу игры
  • коммитим файлы и пушим

Публикация только онлайн версии
  • заходим на вкладку Actions в репозитории
  • в левой панели выбираем Update github pages (game only)
  • в правом верхнем углу таблицы нажимаем Run workflow и нажимаем кнопку Run workflow в появившейся панели
  • выбираем All workflows в левой панели
  • Ждем пока Update github pages (game only) и pages build and deployment (появится после завершения (Update github pages (game only))) завершатся

Ссылку на игру можно найти в вкладке Settings -> Pages.

Настройка desktop сборки

Генерация ключей для подписи автоапдейтов игры
Для этого шага необходимо установить NodeJS
  • открываем консоль (в windows это можно сделать нажав win + R и набрав cmd)
  • запускаем команду
    npx @tauri-apps/cli signer generate
  • вводим пароль для нашего ключа
  • копируем публичный ключ из вывода в консоли (строка случайных символов после слов Your public key was generated successfully:)
  • открываем файл game.build.conf.json в папке репозитория и вставляем ключ в поле pubkey
  • копируем приватный ключ из вывода в консоли (строка случайных символов после слов Your secret key was generated successfully — Keep it secret!)
  • открываем вкладку Settings репозитория
  • в левой панели выбираем Secrets and Variables — Actions
  • в секции Repository secrets добавляем 2 записи:
    1. TAURI_PRIVATE_KEY, в значение вставляем скопированный приватный ключ
    2. TAURI_KEY_PASSWORD, в значение вводим пароль использованный при генерации ключей

Заполнение данных для десктоп сборки
  • меняем иконку игры game-icon.png — размер 1024х1024 пикселей png с прозрачностью
  • открываем файл game.build.conf.json в папке репозитория
  • вводим название игры в поле package.productName
  • изменяем версию в package.version если необходимо
  • изменяем идентификатор сборки в поле tauri.bundle.identifier — только английские буквы разделенные точкой
  • заполняем поля tauri.bundle.publisher, tauri.bundle.copyright, tauri.bundle.shortDescription и tauri.bundle.longDescription
  • в поле tauri.updater.endpoints добавляем ссылку на github pages репозитория с /updater.json в конце
  • настраиваем окно игры в секции tauri.window
  • коммитим и пушим изменения

Создание релиза игры
  • открываем вкладку Actions в репозитории
  • в левой панели выбираем Game release
  • в правом верхнем углу таблицы нажимаем Run workflow и нажимаем кнопку Run workflow в появившейся панели
  • выбираем All workflows в левой панели
  • ждем пока Game release успешно завершиться (может занять минут 10)
  • в левой панели выбираем Update github pages (game and updater)
  • в правом верхнем углу таблицы нажимаем Run workflow и нажимаем кнопку Run workflow в появившейся панели
  • Ждем пока Update github pages (game and updater) и pages build and deployment (появится после завершения (Update github pages (game and updater))) завершатся

Ссылка на последний релиз будет доступна в правом сайдбаре на вкладке Code.

Для созданий новых релизов вместе с изменением файлов игры необходимо изменить версию в файле game.build.conf.json.

qSpider 1.0.0

Вышло большое обновление qSpider — 1.0.0.

Список основных изменений:

— добавлена полка игр
— доступ к каталогу QSP игр прямо из плеера (к сожалению оказалось что РКН блокирует cloudflare домен и поэтому в России каталог сейчас доступен только через VPN, я занимаюсь этой проблемой)
— локализация плеера (английский, русский и украинский язык)
— темная и светлая тема для полки игр
— убран верхний тулбар (доступ к загрузке/сохранению и настройкам через меню паузы открывающееся по нажатию Esc)
— поддержка архивов с игрой не на самом верхнем уровне а в папке
— поддержка rar архивов
— поддержка коллекций игр в архивах (для этого в корне архива должен лежать game.cfg с списком игр)
— количество слотов сохранения теперь можно настроить в конфиге (save_slots аттрибут)
— плеер был переделан для поддержки тем (класический и аеро плееры это теперь тоже темы, и есть возможность создавать полностью свои темы)
— возможность связать элементы HTML форм с qsp переменными
— добавлен ряд кастомных HTML тегов для более простого обновления данных (без полного обновления описания например)
— добавлена возможность вызова qsp кода по определенным событиям (клик, двойной клик, клик правой кнопкой, наведения курсора)
— возможность вызова команд плеера по клику

Привязка элементов HTML форм к qsp переменными
Элементы HTML форм (input, select, textarea) теперь можно связать с qsp переменной c помощью специального аттрибута qsp-bind. Связь двунаправлена — изменение переменной обновит элемент и изменения элемента (ввод текста или выбор опции) записываются в переменную.
<input type="text" qsp-bind="$username">
<input type="password" qsp-bind="$form_password">
<input type="color" value="#e66465" qsp-bind="$color">
<input type="checkbox" value="1" qsp-bind="enable">
<select qsp-bind="$car">
   <option value="mercedes">Mercedes</option>
   <option value="audi">Audi</option>
</select>

Вызов QSP кода по событию
Добавлена возможность вызвать qsp код по определенным событиям с помощью аттрибутов начинающихся с qsp-on:
Подерживаются
  • qsp-on:click — одинарный клик
  • qsp-on:dblclick — двойной клик
  • qsp-on:contextmenu — клик правой кнопкой
  • qsp-on:mouseenter — наведение курсора
  • qsp-on:mouseleave — выход курсора за пределы элемента

<div qsp-on:click="exec: msg 'click'" qsp-on:dblclick="exec: msg 'dblclick'">Click me</div>
<div qsp-on:contextmenu="exec: menu '$context_menu'">Right Click me</div>
<div qsp-on:mouseenter="exec: pl 'enter'" qsp-on:mouseleave="exec: pl 'leave'">Hover me</div>

Вызов команд плеера
Добавлена возможность вызова команд плеера по клику на HTML элемент с помощью аттрибута qsp-action
<button qsp-action="resume">Resume</button>
Поддерживаемые команды
  • quit — выход из игры на полку игр
  • restart — перезапуск игры
  • resume — продолжить игру (закрытие меню паузы)
  • mute — выключить звук
  • unmute — включить звук
  • quicksave — быстрое сохранение
  • quickload — быстрая загрузка
  • pause:saves — открыть меню сохранения
  • pause:preferences — открыть настройки
  • scroll:main:bottom и scroll:main:top — прокрутка окна основного описания
  • scroll:stats:bottom и scroll:stats:top — прокуртка окна доп описания
Эти команды также можно вызвать из кода подключив библиотеку qspider
inclib 'qspider'
@qspider_quit()
@qspider_restart()
@qspider_open_pause_screen('saves')
@qspider_scroll('main', 'top')

Новые HTML теги
  • qsp-variable — вывод значения qsp переменной (обновлятся автоматически), есть доступ по индексу или строковому ключу
    <qsp-variable name="money"></qsp-variable>
    <qsp-variable name="counts" index="5"></qsp-variable>
    <qsp-variable name="$items" key="knife"></qsp-variable>
    
  • qsp-show — возможность скрыть/показать тег по определенному условию
    <qsp-show when="should_show=1">Этот текст будет виден только когда значение should_show перменной будет равно 1</qsp-show>
  • qsp-style — динамический css из qsp переменной (аналогично $STYLESHEET переменной в аеро но не ограничено только этой переменной)
    <qsp-style from="$STYLESHEET"></qsp-style>
    <qsp-style from="$styles"></qsp-style>

Регионы
qsp-region тег дает возможность обновлять только часть экрана, его можно использовать как на уровне файла теми так и в основном или дополнительном описании.
<qsp-region name="region1"></qsp-region>
Для обновления региона из кода необходимо подключить qspider библиотеку
inclib 'qspider'
Библиотека встроена в плеер и предоставляет следующие методы работы с регионами
  • qspider_update_region — полностью перезаписывает содержимое региона
  • qspider_prepend_region — добаление в начало рагиона
  • qspider_append_region — добавление в конец региона
  • qspider_scroll_region — скрол содержимого региона (как в начало так и в конец)
  • qspider_clear_region — очистка сожержимого региона


@qspider_update_region('region1', '<b>Текст</b>')
@qspider_prepend_region('region1', 'Текст<br/>')
@qspider_append_region('region1', '<br/>Текст')
@qspider_scroll_region('region1', 'top')
@qspider_scroll_region('region1', 'bottom')
@qspider_clear_region('region1')

Слои
qsp-layer тег дает возможность быстро показывать или скрывать большой кусок отображения
Слои рисуются один поверх другого позволяя делать наложения интерфейса или например модальные элемент. Порядок слоев определяется через аттрибут index. По умолчанию все слои скрыты.
<qsp-layer name="layer1" index="10">Some UI</qsp-layer>
Для управления слоями необходимо подключить qspider библиотеку
inclib 'qspider'
Библиотека встроена в плеер и предоставляет следующие методы работы с регионами
  • qspider_show_layer — включает отображение слоя
  • qspider_show_only_layer — включает отображение слоя пряча все остальные слои
  • qspider_hide_layer — прячет слой

@qspider_show_layer('layer1')
@qspider_show_only_layer('layer1')
@qspider_hide_layer('layer1')

Кастомные темы
Плеер был переработан для поддержки кастомных тем (классический и аеро варианты теперь тоже отдельные темы). Тема представляет собой HTML код, где для каждого элемента плеера используется свой HTML тег.
Примеры встроенных тем — классическая и аеро.
В игре можно подключать дополнительные теми и определять дефолтную через файл конфига
[[game]]
id = "test-asset-qspider"
title = "Test qspider functionality"
file="qspider.qsps"
themes = ["custom-theme.html"]
defaultTheme = "custom-theme"
Тему можно переключать подключив qspider библиотеку
inclib 'qspider'
@qspider_change_theme('custom-theme')
Более подробное описание тем будет позже.

«Врата Штейна» и что такое цундэрэ

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

Сразу скажу, что, по-моему, игра не тянет на четвёртое место всех времён и народов (в рейтинге VNDB, между «Литературный клуб 'Тук-Тук'» (Doki Doki Literature Club) и «Девушки с ограниченными возможностями» (Katawa Shoujo)), но всё-таки это качественная работа, достаточно интересная для игры и разбора.

Первое прохождение «ВШ» от начала до одной из концовок у меня заняло двенадцать часов, сбор всех концовок – двадцать три часа. Аниме по игре я не смотрел, приквелы и сиквелы тоже.

После краткой вставки – история про молодых и шутливых друзей, которые пошли ломать систему и наломали дров. И теперь они спорят, насколько дрова — моэ.

Читать дальше

Три поросёнка и поход за стройматериалом

Сказки это замечательно. А для интерактивной литературы — настоящий клондайк и находка. Сюжет какой-нибудь «Курочки Рябы» прекрасно ложится на механику классической парсерной головоломки. Ведь чтобы разбить яйцо Деду придётся разыскать и собрать вместе Бабку, Внучку и Жучку у которых, похоже, какие-то тёрки друг с другом. По ходу действия, пенсионер узнает, что не всё так просто как говорят по телевизору; яйцо на самом деле заколдованное, а чтобы хакнуть чары нужно незаметно проникнуть в логово Бабы Яги. И никто кроме Мышки этого сделать почему-то не может…

Ладно, я тут немного увлёкся, но в общем, вы уловили мысль. К сожалению, немногие авторы берутся «интерактивить» этот жанр. Автор игры «Три поросёнка: Наф-Наф и Серый волк» [1] — из тех немногих, кто взялся и у кого это даже неплохо получилось.
Читать дальше

qSpider 0.13.0

Вышла новая версия плеера qSpider — 0.13.0

Новые фичи:
  • msg и input больше не закрываются по клику вне модалки, улучшена поддержка клавиатуры — закрытие по Esc, кнопка в msg теперь фокусируется при открытию (соответственно нажатие пробела или Enter аналогично клику на кнопку)
  • в браузерную версию добавлена возможность открытия файла с списком игр или отдельной игры через URL — например https://qspfoundation.github.io/qspider/?config=https://qspfoundation.github.io/qspider/game/game.cfg загрузит файл конфига, а https://qspfoundation.github.io/qspider/?game=https://qspfoundation.github.io/qspider/game/skazka/skazka.qsp — то есть теперь можно просто выложить файл игры на какой-то сервер и запускать через qspfoundation.github.io/qspider, здесь пока есть ограничение — на сервере должна быть включена поддержка CORS (я занимаюсь возможностью обойти это ограничение)
  • добавлена поддержка запуска игры в текстовом формате qsp — для этого файл должен быть с расширением `.qsps`, поддерживаются кодировки utf-8 и utf-16le (qgen экспортирует в этой кодировке), но я рекомендую utf-8 поскольку файл будет значительно меньше по сравнению с utf-16le
  • для запуска плеера из qgen больше не нужен дополнительный bat файл
  • в десктоп плеере теперь доступна панель разработчика как в обычном браузере

Исправлены следующие баги:
  • сепаратор в меню выводился отдельным пунктом меню
  • исправлена поддержка 4-го недокументированного параметра в rgb функции отвечающего за альфа канал (прозрачность)
  • исправлен первый запуск (иногда при запуске из qgen не открывалась игра)
  • исправлена поддержка html — теперь все аттрибуты тегов должны сохраняться (раньше большая часть терялась при отрисовке)
  • исправлено отображение названия игры в toolbar — раньше длинное название ломало отображение
  • исправлен креш плеера при использование ряда тегов

В процессе работы часть кода была вынесена в отдельные npm пакеты, доступные без плеера
@qsp/converters — в пакете содержатся функции для конвертации из текстового формата qsp в бинарный и обратно
@qsp/cli — консольная утилита для конвертации аналогичная txt2gam (требует наличия усnановленой NodeJS, но может запускаться на linux и mac)
@qsp/wasm-engine — ядро QSP собранное в WebAssembly и JavaScript обвязка для запуска игр, пакет специально собран таким образом что его можно запускать как в браузере так на NodeJS сервере

Альтернатива классической модели мира в парсерах

Прочитал тут статью cheshire «Искры. Полвека парсера». Если не читали — рекомендую. Напишу свои мысли на этот счёт.

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

В любом случае, моделирование мира — это дополнительная работа, которая ложится на автора, и, если он по какой-то причине раньше не уделял этому достаточно времени, то почему он должен начать делать это сейчас? Инструменты помогают в разработке, но не делают за автора всю работу.

Технически, ничто не мешает написать текстовый (не ASCII) вариант условного Cataclysm, но сколько это займёт времени? Рогалики полируют и совершенствуют годами, если не десятилетиями, зачастую силами сообщества. ИЛ — про авторов-одиночек. Каждая игра, по-сути, начинается с чистого листа, как новый движок со своими правилами. И еще: рогалики — это больше песочница. ИЛ, даже, если она паззловая, в большинстве случаев сюжетноориентирована. Если ты хочешь дать игроку полную свободу может просто посоветовать ему какой-нибудь Dungeon AI? Кстати, можно пофантазировать, что в будущем появится гибрид традиционной ИЛ и нейросети, которая возьмёт на себя функции «дорисовки» игрового мира. Если же еще продолжить развивать эту мысль, то в перспективе можно вообще отказаться от объектной модели мира, просто описывая сюжет будущей игры. Автор возьмет на себя роль режиссёра, а движок — кинооператора.

Так или иначе, пока что остается писать свои «велосипеды» или пользоваться существующими библиотеками, моделирующими какие-то классы предметов, например, одежду. Однако авторы почему-то не стремятся массово использовать такие библиотеки. Вообще интересно, что существуют достаточно продвинутые системы написания игр на естественном языке типа Inform 7, но даже в них «из коробки» отсутствует пресловутая «реалистичная модель мира». Авторы, как и прежде, предпочитают использовать абстрактные классы типа «контейнера» или «сцены». А может большего и не нужно?

Дрейфующий. Весенняя штучка


«мне крышка…»

— такой оптимистичной фразой на русском языке начинается игра Adrift <Lost in the (Ros)Cosmos>, написанная Pinkunz на Spring Thing 2022*. Игра про советского (российского?) космонавта, как следует из названия, дрейфующего себе в космосе. И только от игрока будет зависеть сколько ему еще предстоит в нем дрейфовать, ибо запас кислорода не бесконечен. Как тебе такое, Илон Маск?

Игра весьма напоминает Судный день или даже Луну-9 Петра Косых (quantumcat ). Олдовая графика смотрится органично, а крохотный силуэт Бурана на фоне звезд выглядит трогательно. Есть некоторые неточности в употреблении русских слов и фамилий, но возможно это klukva. По заявлению автора — это только первая часть, и, возможно, в продолжении мы узнаем о роли Роскосмоса в этой истории.


* Ежегодный фестиваль игр в жанре интерактивной литературы. Проводится весной.

Parchmap

Parchmap — веб-интерпретатор Z-машины, похожий на parchment, но с дополнительным функционалом.

Ключевые особенности:

  • автоматическое составление карты
  • возможность оставлять заметки в комнатах
  • быстрое перемещение между локациями
  • автоматическое завершение ввода (подсказки)
  • навигация по стрелкам курсора (с shift-ом)



На данный момент поддерживаются только z-игры. В некоторых из них автонавигация и картографирование могут не работать.

Страница с обсуждением на intfiction.org