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

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

Ладно, я тут немного увлёкся, но в общем, вы уловили мысль. К сожалению, немногие авторы берутся «интерактивить» этот жанр. Автор игры «Три поросёнка: Наф-Наф и Серый волк» [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

qSpider 0.12.0

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

В этой версии добавлена desktop версия плеера для 3 основных платформ
Windows
MacOs
— Linux — deb пакет и AppImage формат

Основные изменения в desktop версии:
— возможность открыть qsp игру из папки (в отличии от web версии, где можно открыть только архив)
— открытие игры через drag-n-drop файла игры на окно плеера
— открытие игры через консоль (с помошью параметра --file)
— загрузка файла конфига из папки с игрой
— дополнительная секция в файле конфига для настройки окна desktop плеера
— автоматической обновление desktop плеера при выходе новой версии

Исправлены следующие баги:
— не поддерживался html в диалоге input
— в aero режиме убран лишний отступ при HIDE_SCROLL_ARROWS=1
— исправлен тег center для большего соответвия classic плееру

Настройка окна desktop плеера
В конфиг файле добавлена новая секция
[game.window]
width = 1280
height = 960
resizable = true
minWidth = 1024
minHeight = 768
width и height задают размер окна при старте игры, minWidth и minHeight дают возможность задать минимально возможные размеры при resize окна, а resizable параметр позмоляет запретить изменения размера в принципе (автоматически включается в aero редиме)

Запуск плеера из qgen
Из-за бага в используемой библиотеке сделать плеер напрямую совместимым с qgen не получилось, надеюсь в ближайшее время баг будет исправлен и тогда плеер можно будет просто выбрать в настройках qgen.
Пока же для запуска можно использовать простенький bat файл
SET QSPIDER=C:\Program Files\qSpider\qSpider.exe
SET DESTPATH=%~f1
start "" "%QSPIDER%" "--file=%DESTPATH%"
Меняем путь установки если он отличается от стандартного, сохраняем в виде .bat файла и потом выбираем этот файл в настройках qgen.

Английская IFWiki станет больше похожей на русскую

Английская IFWiki официально стала одним из проектов Фонда Технологий Интерактивной Литературы (IFTF).

IFWiki была основана в 2004 году Дэвидом Корнельсоном как энциклопедия истории, статей и удобный каталог ссылок на Usenet и личные блоги. Последние несколько лет сайт перестал быть основной базой для игр и обзоров, уступив IFDB. База интерактивной литературы IFDB – сейчас самый активный проект в западном сообществе, который недавно преодолел планку в 10 000 опубликованных обзоров на игры.
Читать дальше

Обзоры Контигр-2021, часть 2

«Путешественники по мирам», Alestin

Очень хорошая игра на Twine. Играем за (сюрприз!) путешественницу по мирам, которая попадает в некий средневековый мир, чтобы устранить несправедливость, которая там случилась. В итоге это выливается в натуральное детективное расследование.

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

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

Текст в игре тоже очень хорош. Читается легко и приятно. Единственное, за что зацепился глаз — парочка анахронизмов, например, странно слышать «вау» из уст средневековой девушки. С другой стороны, кто эти параллельные миры разберёт.
Читать дальше

Обзоры Контигр-2021, часть 1

«Дождевые черви ностальгии», Мидория Имаева

Демку этой игры автор присылала на Паровозик, я даже писал на неё обзор. Теперь игра подросла (до 300 Мб), переехала с фурки на самодельную платформу на Java и, по идее, перестала быть демкой.

Первый запуск этой замечательной игры оставил меня в недоумении. Я создал персонажа, выбрал ему созвездие «Хобот» и честно распределил 5 очков умений. Пообщался в таверне с разными тёмными личностями, вышел на улицу и попытался найти оружейный магазин, чтобы хотя бы купить себе меч. Справедливо рассудив, что меч проще всего будет найти на столичном тракте (типа это главная улица в городе), я отправился туда и немедленно был убит одержимым гоблином. При этом игра тут же закрылась.

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

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

qSpider 0.11.0

Вышла новая версия плеера qSpider — 0.11.0
Демо — https://qspfoundation.github.io/qspider/

Новые фичи:
  • подержка игр в AeroQSP формате
  • поддержка style аттрибута в тегах
  • к основным элементам интерфейса добавлен data-qsp аттрибут (data-qsp=«main», data-qsp=«actions» и тд)
Исправлены следующие баги:
  • кнопки сохранения/загрузки теперь будут спрятаны, если в игре установлен nosave=1
  • исправлен align аттрибут в таблицах
  • исправлен вызов onactsel (в прошлых версиях поведение отличалось от классического плеера)
Поддержка игр в AeroQSP формате
Собственно этот функционал так и затянул выход новой версии. Я старался добиться, чтобы как можно больше AeroQSP игр можно было запускать без дополнительных изменений самой игры. Оказалось что HTML движок в флеш версии AeroQSP достаточно специфичен и не всегда совпадает с тем как работает браузер.

Вот список особенностей и отличий:
  • несколько игр использовали синтаксис, который поменялся в 5.8.0 (порядок аргументов в INSTR, ARRCOMP, ARRPOS) и в qSpider будут выдавать ошибку о несовпадении типов данных
  • в AeroQSP шрифты подключались в формате swf, использовать такой формат больше нет возможности, поэтому если игра использует нестандартные шрифты — их необходимо будет подключать через файл конфига в секции game.resources
  • в qSpider не поддерживаются эффекты pixels, h_blinds и v_blinds, остальные эффекты могут немного отличаться от того как работала флеш версия
  • не поддерживается переменная SCROLL_SPEED (хотя я вроде и не видел чтобы она использовалась хоть в одной игре)
  • обработка клика в флеше отличается от браузера — если на блоке нет обработчика то он не перехватывает клик даже если размещен поверх другого, в ряде игр это привело к тому что неспрятанные панельки (пустые и не видимые) в qSpider блокируют клики по линкам под ними. Пример — игра Новогодние сказки где кнопка Играть почти полностью перекрыта пустой на этот момент панелькой действий. Лечится небольшими изменениями игры — отключением неиспользуемых панелей.
  • в флеше тег center внутри таблиц растягивает таблицу на всю ширину, при этом еще размеры ячеек без явно указанной ширины в этом случае считаються не как в браузере, чаще всего заметно в действиях — для форматирования по умолчанию используется таблица, и если в названии действия использовать тег center, то в флеш версии текст будет по середине панели, а в qSpider — нет. Лечиться добавлением width=100% в такую таблицу. Я не смог сделать это на уровне плеера поскольку в ряде игр это ломало отображение.

Пример подключения
Для подключения AeroQSP игры через конфиг необходимо в основной секции добавить mode = «aero», и если используеться размер игры отличающийся от дефолтного 800х600 — добавить секцию с размерами

[[game]]
id = "c2cb4b5b-6a1c-482e-bb47-9ef207fb0dcd"
title = "Чашка кофе"
mode = "aero"
file = "aero_coffee.aqsp"

[game.aero]
width = 504
height = 680
При этом можно использовать как aqsp архив, так и распаковать его и прописать ссылку на qsp файл в папке.

ВАЖНОЕ ЗАМЕЧАНИЕ:
Я не собираюсь развивать и поддерживать (кроме багфиксов) формат AeroQSP, поэтому не советую начинать новые игры с его использованием. В планах добавить в qspider возможность упавления темой игры, но пока конкретной даты нет.