Разработка интерактивной литературы, статьи, мастер-классы, метафизика ИЛ.
  • Дата создания
    23 февраля 2015
  • Топиков
    56
  • Ограничение на постинг
    0.000

Массивы уже не те, или Изменение в логике работы массивов в QSP

Как ведут себя массивы сейчас

Начать следует с того, что в «классическом» плеере версии 5.7.0 и ниже, а так же в Quest Navigator 0.0.28 и AeroQSP, в одном элементе массива можно хранить как текстовое, так и числовое значение. Вот как это выглядит:
код 1
При этом мы спокойно можем получить и числовое, и текстовое значение по указанному индексу:
код 2
Правда это создаёт ряд дополнительных трудностей. Например, каков будет размер массива в нашем примере?
код 3
В обоих случаях arrsize выдаст ответ 2. И нам может показаться, что так и должно быть, ведь скорее всего мы имеем дело с двумя массивами: текстовым и числовым. Но на самом деле массив один. Ведь если мы будем добавлять только текстовые значения, размер «числовой части» массива так же увеличится.
код 4
В этом примере оба arrsize вернут 4. Это показывает, что мы имеем дело с одним и тем же массивом, который позволяет под одним индексом хранить элементы двух типов, а если мы не задали какой-то элемент явно, то его значение будет значением по умолчанию. Для числовых элементов значение по умолчанию 0, для текстовых — '' (пустая строка).

Такое поведение массива весьма просто представить в виде таблицы:
иллюстрация 1
Для удобства восприятия мы не внесли в таблицу значения элементов, которые не были явно заданы. Однако, как было сказано выше, при попытке использовать значения этих элементов, мы получим значения по умолчанию. В данном случае для числовых элементов это будут нули.

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

То есть в одном массиве хранили и наименования юнитов, и их количество.

Однако данным способом Вы могли пользоваться, только когда явно указывали числовой индекс элемента массива. Если написать такой код:
код 5

— уверенность в том, какое значение вернёт arrsize пропадает.

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

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

Мы снова не вписали в таблицу значения элементов, которые не задавали, однако mass[0] и mass[2] вернут нам нули, если мы попробуем их использовать, а $mass[1] и $mass[3] вернут пустые строки (это соответствует их значениям по умолчанию).

Таким образом оба arrsize вернут нам значение 4, хотя мы явно задавали только два числовых и два текстовых элемента.

Как массивы будут себя вести

Новая версия плеера ещё не вышла, но всё ниже следующее будет работать в ней так. (Уже работает в плеере qSpider)
Теперь под одним индексом можно хранить либо только текстовое, либо только числовое значение. Мы своего рода объединили столбцы нашей таблицы:
Иллюстрация 4
Это означает, что код:
код 5
будет работать так же, как и работал. Т.е. каждая операция присвоения создаёт новый элемент в массиве, которому мы присваиваем либо строку, либо текст. И в данном случае мы создадим четыре разных элемента массива, два из которых будут текстового типа, два — числового.

Немного по-другому поведёт себя наш изначальный код:
код 1

Здесь, присвоив элементу сначала текстовое, а затем числовое значение, мы «затрём» изначальное текстовое значение числовым. В результате работы этого кода мы получим массив из двух элементов, и оба элемента будут числовыми — arrsize вернёт 2 в обеих командах.

Чтобы закрепить новые знания, рассмотрим другой наш пример:
код 4

Здесь, как и в предыдущем примере, числовые значения «затрут» текстовые для элементов 0 и 1, а в элементах 2 и 3 будут текстовые значения. Соответственно обе команды arrsize вернут значение 4.

В виде таблицы мы можем представить это так:
иллюстрация 5

Если мы попытаемся использовать текстовые значения элементов 0 и 1, то получим значения по-умолчанию, то есть — '' (пустые строки). Аналогично, если мы попытаемся использовать числовые значения элементов 2 и 3, то получим числовые значения по-умолчанию — 0 (нули).

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

Что можно и нужно сделать

Автор этой статьи уже ощутил на себе вес изменений в работе массивов.

Протестировав «Вереницу миров или выводы из закона Мёрфи» на плеере qSpider, который уже использует новую версию библиотеки, я (не без помощи Werewolf'а и Byte'а) обнаружил ошибки логики в коде, которые сглаживались в плеерах версии 5.7.0. именно благодаря тому, что под одним индексом в массиве можно было хранить и текстовое и числовое значение. К счастью, эти ошибки легко поправить.

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

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

И наш совет таков: не используйте и текстовые, и числовые значения элементов в одном массиве. Лучше завести два массива. Отдельно для текстовых и числовых значений:
код 6

Помимо изменений в массивах нас ждёт ещё целый ряд изменений, но они менее глобальны, и о них мы поговорим в следующих статьях.

Всем успехов в написании игр, и не бойтесь кажущейся сложности!
памятка

Статья написана по мотивам:
статьи Pseudopodhttps://trello.com/c/z9AbJa8O/18-одновременное-использование-arri-и-arri
и поста Bytehttp://qsp.su/index.php?option=com_agora&task=topic&id=1290&Itemid=57

Преобразование типов в QSP

Эта статья поможет вам разобраться в таком сложном вопросе, как преобразование типов в операции присвоения, или в выражениях.

В QSP существует всего два типа значений: числовой и текстовый. Числовой означает любое целочисленное число в пределах от -2147483648 до 2147483647; а текстовый — любую строку текста (нет, на самом деле любую. Ограничения для строк — 2 Гб текста).

Вот как выглядят такие значения:



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

Чтобы записать в числовую переменную числовое значение, мы просто пишем имя переменной, знак = и число:



Чтобы записать в текстовую переменную текстовое значение, перед именем переменной мы обязательно ставим знак $.



Если мы попытаемся записать в текстовую переменную числовое значение, плеер автоматически преобразует число в текст, и в текстовой переменной окажется текстовое значение:



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


только для команды 2 не удастся выполнить преобразование типа


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

Всё становится гораздо интереснее, если мы имеем дело не с отдельными значениями, а с выражениями.

Например, если мы попытаемся сложить два числа, то результатом сложения будет третье число:



Если мы попытаемся «сложить» две строки, то мы их просто «склеим» (в программировании это называется конкатенация):



Но что будет, если мы попытаемся сложить число и строку?

А тут произойдёт вот что.

Если хотя бы одно из значений в выражении — числовое, плеер попытается все значения преобразовать в числовые и вычислить выражение:



Если преобразование не удастся, то выполняется конкатенация:



Строки можно только «складывать» или сравнивать, поэтому если вы попытаетесь проделать с ними какие-то другие штуки, плеер выдаст ошибку о несоответствии типов данных:



Однако, если возможно преобразование всех строк в числа, то можно сделать так:



Таким образом, плеер обязательно преобразует тип к необходимому, если это возможно, особенно для операций присвоения.

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

Старайтесь не использовать строковые и числовые значения в одном выражении, либо приводите их к требуемому типу с помощью функций $str и val:



Не забывайте пользоваться подвыражениями, если нужно вставить значение в строку:



Оригинал статьи в вк.

Технические заметки о gamebookformat

После недавнего выхода аудиообзора движка gamebookformat на диаласе, думаю, стоит поделиться некоторыми практическими аспектами.
Главное предварительное требование — установленный python 2.7. К сожалению, проект заброшен, обновлялся последний раз 5 лет назад. Для такого случая я использовал портативную версию python, чтобы с третьим не было конфликтов в переменных среды.
У движка есть возможность экспорта в разные форматы. В статье я покажу примеры для rtf, html и txt. Мне кажется, существует только два перспективных варианта использования движка:
1. Для создания печатной (или PDF) версии книги-игры.
2. Для генерации переходов и параграфов с последующим импортом в редактор митрил.
Читать дальше

Как написать текстовую игру на Ficdown

Ficdown — это набор стандартов на основе языка разметки Markdown, который можно использовать для создания интерактивной литературы в гипертекстовом стиле или на основе выбора (choice-based). Форматирование текста выполняется с использованием обычного Markdown и с сохранением возможности внедрения HTML и CSS для прочего оформления, при этом несколько элементов разметки приобретают дополнительные свойства, определяющие историю. Разработчик Ficdown, Рудис Муизниекс, объясняет концепцию своей системы следующим образом:

«Существует множество систем для создания интерактивной литературы на основе выбора. Многие из этих систем подразумевают изучение нового языка скриптов и требуют использования специализированных сред разработки (онлайн или установленных на вашем компьютере). Большинство из них производят игры, для которых требуется JavaScript и в которые можно играть только в веб-браузере. Я создал Ficdown по трём причинам:

  1. Я хочу писать интерактивную литературу в текстовом редакторе по своему выбору.
  2. Я хочу, чтобы мою интерактивную литературу можно было воспроизводить на таких устройствах, как мой Kindle без Javascript или подключения к Интернету.

  3. Я хочу использовать Markdown вместо изучения нового языка скриптов.

Используя Ficdown, вы можете сосредоточиться на сочинительстве. Ficdown использует только существующий синтаксис Markdown для определения всего в вашей истории, поэтому вы можете писать в любом редакторе, в котором хотите, и вам не нужно изучать новый язык скриптов. И хотя истории Ficdown можно воспроизводить в интерактивном режиме в веб-браузере, их также можно преобразовать в стандартные форматы электронных книг или статический HTML для автономного воспроизведения.»

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

Фильтр после коллажа – секрет успеха незадачливого цифрового художника

Всем привет, в этой статье я бы хотел поделиться собственной техникой создания иллюстраций к играм, без претензии на качественную графику. Статья предназначена для авторов, которые хотят сэкономить (я тоже не всегда так делаю) и при этом не умеют рисовать. Для музыки варианта аудио-коллажа я не нашёл, зато есть множество свободных аудиоресурсов, где выбираешь на свой вкус. Итак, для начала, у вас должно быть:
• образ в голове для иллюстрации;
• доступ к интернету для скачивания картинок и запуска фильтра;
• Paint.Net (можно просто Paint) для элементарного редактирования.
Читать дальше

Вагон-Вагон. Клубок технологий внутри простой текстовой игры. Часть 2

Продолжение рассказа о создании нашей интерактивной новеллы для мобильных телефонов. Сложные тесты, перевод на английский, превращение html-страницы в полноценное приложение через Apache Cordova и заливка в магазины.



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

Вагон-Вагон. Клубок технологий внутри простой текстовой игры

История создания интерактивной новеллы для мобильных телефонов. Игра проста на вид, однако под капотом у неё нетипичное сочетание технологий, а разработка в режиме “по вечерам в свободное время” заняла почти два года.



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

Семь обязательных требований к качественной парсерной игре

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

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

Конечные автоматы в менюшном движке. Повышаем доступность доисторического приключения на ink. Часть 4

Продолжение части 3. Ссылки на итоговую версию игры «Доисторическая схватка» приведены в конце текста.

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

Словом «доступность» в русском языке может обозначаться очень большое количество вещей, вплоть до женского поведения. Но и даже конкретно внутри IT-индустрии часто путаются понятия доступность в смысле accessibility и доступность в смысле availability, поэтому явно уточним, что данный материал посвящён вопросам accessibility (также известной как a11y), то есть способности какого-либо продукта (материального или нематериального), быть использованным как можно большим количеством разных пользователей, независимо от их физических и технических ограничений.
Читать дальше