Упражнения с головоломками: избушка на курьих ножках

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

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

У избушки есть ноги, поэтому она может двигаться вместе с вами. Если избушка пройдёт немного вперёд на север, рядом будет лесная полянка, а если она сделает несколько шагов назад, то в окне будет виден ручей.

В этом и есть первый уровень сегодняшнего упражнения: сделать шагающую избушку. Она может прогуливаться вперёд-назад, разминать ноги. Можно выйти из избушки, но тогда придётся её догонять. Если вам этого мало, дальше будут два сложных дополнения.
Читать дальше

qSpider 0.10.0

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

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

Исправлены следующие баги:
— неправильно создавался файл сохранений размером > 64кб (любая более-менее крупная игра), загрузка такого сохранения в дальнейшем выдывала ошибку
— ошибка в qsp коде не отображалась, если перед ней был использовался оператор взаимодействующий с вводом-выводом (`msg`,`input`, `inclib`)
— если аудио файл уже проигрывался, при вызове `play` он запускался снова
— отсутствовал hover на элементах списка игр и слотах сохранений

Новые фичи:
— поддержка тега `video`
— подключение к игре дополнительных ресурсов — шрифты, css и js

Подключение к игре дополнительных ресурсов
в файле конфигурации добавилась новая секция с описанием дополнительных ресурсов
[game.resources]
styles = [
  "https://fonts.googleapis.com/css?family=Sofia",
  "styles.css"
]
scripts = [
  "script.js"
]
fonts = [
  ["Shelter", "fonts/shelter.woff2"]
]
icon = "icon.png"
В `styles` подключаем дополнительные css файлы — это могут быть как внешние ссылки, так и файлы из папки с игрой.

В `scripts` подключаем JavaScript файлы. Поскольку нет возможности автоматически удалить JS код из памяти (при переключении на другую игру например) — это надо делать вручную. Дальше будет пример файла. Добавлена возможность создавать специальное событие на объекте `window` из кода игры с помощью `exec`.
exec('qspider.event: test_event')
exec('qspider.event: event_with_args[1, "test"]')
Возможности вызвать код игры из JS пока нет — это в планах.
// записываем весь наш код в специальную переменную, чтобы потом можно было удалить
window.custom_game_script = {
  // обработчик игровых событий
  on_event(e) {
    // в e.detail.name будет имя события (test_event или event_with_args из примере выше)
    // в e.detail.args будeт массив дополнительных аргументов (в event_with_args это [1, "test"])
  },
  // обработчик выгрузки игры
  unload() {
    // отписываемся от событий
    window.removeEventListener('game-unload', window.custom_game_script.unload);
    window.removeEventListener("qspider-event", window.custom_game_script.on_event);
    // удаляем переменную
    delete window.custom_game_script;
  },
};
// добавляем слушатель на специальное событие, вызываемое при выгрузке игры
window.addEventListener('game-unload', window.custom_game_script.unload);
// добавляем слушатель на событие, вызываемое из игры через exec
window.addEventListener("qspider-event", window.custom_game_script.on_event);
В `fonts` подключаем дополнительные шрифты. Рекомендуемый формат — woff2, он поддерживается всеми современными браузерами. В сети полно онлайн конверторов из ttf в woff2.
Если у шрифта есть Bold, Italic и BoldItalic варианты в отдельных файлах, то подключение будет выглядеть вот так
fonts = [
  ["Shelter", "fonts/shelter.woff2"],
  ["Shelter", "fonts/shelter-bold.woff2", "bold"],
  ["Shelter", "fonts/shelter-italic.woff2", "normal", "italic"],
  ["Shelter", "fonts/shelter-bold-italic.woff2", "bold", "italic"]
]
`icon` дает возможность заменить иконку в табке браузера, т.н. favicon. По умолчанию там лого QSP.

Упражнения в интерактивной литературе: верёвка

В прошлой статье было довольно простое упражнение, которое можно было усложнить для себя дополнительными условиями. А в этот раз будет по-настоящему Сложная Проблема Парсера. Сегодня мы поговорим о верёвках.
Читать дальше

Соавторство игрока

Привет!

Специфика парсерных игр предполагает ввод команд игроком. Чаще всего, команды используются для продвижения по сюжету. Если обратиться к другим представителям текстовых игр — МАДам, то мы увидим, что кроме обычных «игровых» команд в них имеется богатый набор для описания эмоций, отыгрыша персонажа. В интерактивной литературе, по понятным причинам, нет прямой социальной составляющей как в МАДах, но техническая возможность сделать интерактивную литературу более «литературной» в основных парсерных интерпретаторах есть. Ее можно реализовать с помощью системы комментариев, которые «игнорируется» игрой, но попадают в лог (если он ведётся).

К чему я все это?

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

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

Наконец, (из рубрики «Очевидное — невероятное») можно провести конкурс на художественное прохождение какой-нибудь игры. Фан-фик по мотивам, так сказать.

В заключении, хотелось бы поднять вопрос технический, применительно к вышесказанному. Если мы делаем игру более литературной, то желательно, чтобы эта «литературность» была во всем, в т.ч., в самих командах. Не
> о ящик
, а
> Я осматриваю/окидываю взглядом/бросаю взгляд/пронизываю взором ящик
Речь не про увеличение словаря и распознавательных способностей парсера (хотя и то, и другое было бы неплохо), а про поддержку системы алиасов — как в тех же МАДах. В идеале — без изменения кода игры и подключения библиотек. Если кто знает, напишите, реализовано ли в каких-нибудь интерпретаторах что-то подобное.

ИЛ-упражнения: лифт

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

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

Симуляция лифта — это довольно просто: это комната, в которую можно зайти, нажать на нужную кнопку и выйти на этот этаж. Единственная сложность — то, что выход ведёт в разные комнаты, когда нажаты разные кнопки.

И на этом можно закончить, это приличное полезное упражнение, но ведь мы можем усложнить симуляцию!
Читать дальше

Опрос впечатлений об игре "17 комнат"

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

В итоге получилось сравнительно цельное произведение, даже с каким-то общим сюжетом и сеттингом.
Многие игроки уже успели всё пройти или хотя составить первое впечатление об игре, но большинство отзывов осталось только в истории различных чатов, поэтому я решила провести небольшой опрос по итогам данного мероприятия.
Кто ещё не играл, скачать игру (актуальная версия) можно на Github. Для игры требуется интерпретатор Instead.

Во всех опросах, кроме последних, можно выбрать до 3-х вариантов ответа. Мы оцениваем комнаты, а не личности, поэтому авторов в опросе не содержится. Также оцениваются только комнаты-файлы.

Можно писать своё мнение об игре и конкретных комнатах в комментариях. Авторам будет приятно.

Новости интерактивной литературы - седьмое мая

Roy Lazarovich сделал надстройку «Parchmap» над интерпретатором Parchment. Она добавляет автокарту, заметки, заметки на карте, автонавигацию, автодополнение и улучшенное сохранение к играм на Z-машине.

Новый движок Calico — это открытый шаблон для игр на Ink. (см. код на Github)

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

Особняк Тёти Агаты, или Большое Парсерное Приключение

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

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