ИнформАрхив QSP

F.A.Q

Список наиболее часто задаваемых вопросов и ответы на них.

Общие вопросы

Что такое текстовые игры, текстовые квесты, интерактивная литература?

http://ifwiki.ru/FAQ

Что такое QSP? Что это за сайт QSP.org?

QSP - это система разработки текстовых игр. Проще говоря, с помощью QSP можно играть в текстовые игры и создавать собственные.

Подробнее см. здесь - Информация о QSP

Хочу написать свою текстовую игру, с чего начать?
  1. Если у вас еще не установлен плеер QSP, скачайте и установите "Набор игрока".
  2. Скачайте справку и редактор QGen со страницы "Разработчикам".
  3. Откройте Учебник по QSP для редактора Qgen и следуйте его инструкциям.
Что такое AeroQSP?

Ответ здесь.

Где взять исходный код?

qsp.dll, txt2gam, AeroQSP, справка - https://github.com/QSPFoundation/qsp

Редактор игр QGen - http://my-trac.assembla.com/q-gen (нынешняя версия на wxWidgets), https://github.com/rrockru/QtQGen (будущая версия на Qt)

Под какой лицензией распространяется плеер QSP? А игры?

Полезно будет знать для всех. Байт отвечает на вопросы по лицензиям на плеер и игры QSP.

Вопрос 1: Лицензия на платформу QSP (в частности плеер). Какие права есть у автора игры в части распространения (в том числе и коммерческое) плеера совместно со своей игрой? И все ли авторы версий для разных ОС (windows, linux, mac os и т.п.) едины в этом вопросе?

Ответ: Классический плеер - под GPL, либа под LGPL. Другие плееры могут быть под своими лицензиями. Если меняем исходники либы или классического плеера, то нужно выкладывать модифицированные исходники. Распространять существующий плеер можно как угодно, в т.ч. коммерчески.

Вопрос 2: Лицензия на игру под QSP. Какие права есть у авторов самой игры в части распространения (в том числе и коммерческое)?

Ответ: Лицензию на игру указывает сам автор игры. Плеер и игры - разный контент. Соответственно, автор может как угодно распространять игру.

Вопрос 3: Какие права есть у авторов платформы QSP в части игр? Оставляют ли они за собой право без согласования с автором распространять игру (в том числе и на возмездной основе) либо получать доход от безвозмездного предоставления доступа к игре, например, от рекламы и т.п.? И все ли авторы версий для разных ОС (windows, linux, mac os и т.п.) едины в этом вопросе?

Ответ: См. п.2. Если автор игры специально не оговаривает условия распространения игры, считается, что игру может распространять кто угодно и как угодно.

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

Файл проекта - ".qproj", зачем он нужен?

Это т.н. "настройки проекта". Там сейчас хранятся "папки локаций". Этот файл нужен только при использовании QGen, и используется только на этапе разработки игры. Со временем, туда могут быть добавлены настройки QGen, специфичные для конкретного проекта.

Файл .qproj создается автоматически. Если случайно стереть его, ничего страшного не произойдет - просто придется заново рассовать локации по папкам. Сами локации никуда не денутся.

Для того, чтобы запустить игру, он не нужен.

Вопросы по программированию
Как сделать время?

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

Также см. Календарь по методу счёта Юлианских дней

Как сделать календарь?

Самый быстрый способ сделать очень точный календарь без использования циклов и громоздкого кода, это воспользоваться уже готовым решением от evp: Календарь по методу счёта Юлианских дней.

Тема на форуме QSP.

Как сделать бой?

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

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

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

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

Пример реализации боя 1.0

Как сделать диалоги?

Пример, показывающий реализацию 3-х видов диалогов.

  • Простой линейный диалог
  • Многовариантный диалог с использованием переменных.
  • Простой случайный диалог

Подготовил пример — WladySpb

Чистка текста — y4ndexx

Пример реализации трёх видов диалога

Как использовать HTML?

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

usehtml=1

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

Список поддерживаемых HTML-тегов можно посмотреть на странице справки "Список поддерживаемых HTML-тегов для классического плеера""

Работу с HTML-тегами демонстрирует пример, который можно скачать отсюда

Как "зациклить" музыку, сделать плейлист?

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

Самый примитивный вариант зацикливания представлен в справочнике по самым часто задаваемым вопросам из темы "Как сделать?": Как зациклить мелодию.

Чуть более сложные варианты с зацикливанием целых плейлистов представлены в статье "Как сделать плейлист?".

Ну и самым продвинутым вариантом на сегодня является Гибкий плейлист от Werewolf.

Как сделать "считаемые" предметы, например, "патроны: 50 шт."?

А вот это вопрос довольно простой. Понятное и очевидное решение изложено в статье "Как сделать считаемые предметы?" в справочнике по самым часто задаваемым вопросам из темы "Как сделать?".

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

Как сделать переход на метку в локации из действия?

Привычка к использованию оператора JUMP часто приводит автора к следующей проблеме:

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

Это связано с тем, что область видимости меток органичена блоком кода, в котором они находятся, а выполняемое действие - это отдельный блок кода.

Обойти это ограничение довольно просто.

!Начало локации
IF $args[0]<>'': JUMP $args[0]
...
...
:моя_метка
...
...
!Действие, из которого будет переход на нужную нам метку
ACT 'Переход':
    GOTO $CURLOC,'моя_метка'
END
Как сделать действие, которое появляется при выполнении определенного условия?

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

"Как сделать?" на форуме qsp.org.

Так же есть синтетическая статья на основе темы "Действие по условию".

Как вставить картинку?

Со всеми возможностями работы с изображениями в классическом плеере QSP вы можете ознакомиться на странице справки wiki.qsp.org/Графика.

Краткая статья с наиболее распространёнными примерами вывода изображения есть в справочнике по самым часто задаваемым вопросам из темы "Как сделать?" на форуме qsp.org.

Какие ограничения есть в QSP?

Актуальную информацию по ограничениям можно уточнить в соответствующем разделе справки: wiki.qsp.org/Ограничения

Максимальное количество одновременно видимых действий на локации: 50

Максимальное количество подключаемых файлов: 100

Максимальное количество аргументов: 20 (для плееров версии 5.7.0 и ниже — 10)

Максимальная вложенность выражений: 30

Максимальное количество операторов в выражении(на одном уровне вложенности): 100

Максимальное количество пунктов пользовательского меню: 100

Максимальное количество предметов в инвентаре: 1000

Максимальное количество одновременно проигрываемых звуков: 500

Длина строки теоретически ограничена только объемом доступной оперативной памяти, либо размером типа "int": 2 гигабайта текста.

Числовые переменные принимают значения от -2147483647 до 2147483647.

Количество переменных ограничено 12800, при этом не допускается более 50 переменных с одинаковым хэшем имени.

Количество элементов массива ограничено размерностью "int", в зависимости от того, как собрана библиотека, 32768 или 2147483648 соответственно.

Количество локаций ограничено размером типа "int". В зависимости от того, как собрана библиотека, "int" будет ограничивать либо 32768, либо 2147483648 локаций.

Как вернуться на предыдущую локацию?

Запоминаем текущую локацию при переходе, чтобы потом вернуться на неё.

! В начале игры назначаем обработчик перехода на новую локацию.
$ONNEWLOC = 'ONNEWLOC'

! В локации "ONNEWLOC":
IF $CURLOC <> $nextLoc:
    $prevLoc = $nextLoc
    $nextLoc = $CURLOC
END

! В локации, из которой надо вернуться на предыдущую:
ACT 'Вернуться':
    GOTO $prevLoc
END

Более подробный ответ на этот вопрос в статье "Как сделать возврат на предыдущую локацию?".

Ещё более подробный ответ на этот вопрос есть в соответствующей теме на форуме.

Тёмная сторона силы
Использование массивов, многомерные массивы

Для ответа на этот вопрос подготовлена синтетическая статья на основе соответствующей темы.

Так же смотри статью о том, что такое массивы на сайте aleksversus.narod.ru.

Использование фигурных скобок

Фигурные скобки в QSP предназначены в освновном для того, чтобы записывать обычный код QSP в виде текстового значения. Например, мы можем вписать в переменную $somecode некоторый код:

$somecode={
  p 'sdasdasd'
  er=3454
  $d='sdsd'
  'asdad'
  if args[0]=23:pl 'asdasdasd'
}

А затем выполнить этот код с помощью оператора dynamic в любом месте игры:

dynamic $somecode,23

Фигурные скобки поддерживают вложенность, в отличие от кавычек и апострофов. И в отличие от кавычек и апострофов не поддерживают подвыражения.

Подробнее можно прочесть здесь: "Фигурные скобки"

Модуль Олегуса для работы с таблицами данных

Таблицы данных — это не те таблицы, которые вы можете наблюдать на экране при использовании тега "<table>". Таблицами данных называется определённый способ хранения данных в виде условных строк и столбцов.

Olegus t.Gl. написал для QSP модуль работы с такими таблицами данных. Что с его помощью можно делать:

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

Более подробно можно о модуле можно почитать на форуме qsp.org в теме "Модуль для работы с таблицами данных",

или на официальной странице модуля на форуме ifiction.ru в теме "Модуль для работы с таблицами данных в QSP".

Полная документация на модуль здесь.

Модуль Олегуса для работы с меню (расширение функционала оператора "menu")

Что можно делать с помощью модуля для расширения функционала оператора "MENU":

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

Более подробно о модуле можно прочитать на форуме qsp.org в теме "Модуль для работы с меню (расширение функционала оператора "menu")",

или на официальной странице модуля на форуме ifiction.ru в теме "Модуль для работы с меню (расширение функционала оператора "menu") в QSP".

Полная документация на модуль здесь.

"Типограф" — модуль для форматирования текста

Платформа QSP позволяет задействовать возможности HTML для форматирования текстов описаний и всего такого, и это хорошо. Плохо то, что писать html-ready текст — сущая мука: теги загромождают текст и мешают его восприятию в редакторе.

Чтобы хоть немного облегчить подобную работу, Olegus t.Gl. написал небольшой модуль для форматирования текста. Он позволяет использовать сокращённые формы записи тегов, что изрядно облегчает как написание, так и визуальное восприятие "исходного" текста.

Например, для вставки заголовка в обычный html-текст, в него нужно добавить запись: "<h1>Заголовок</h1>". Для вставки параграфа, растянутого по ширине, — "<p align=justify>Текст</p>". С помощью представляемого модуля данные записи можно сократить до "з1. Заголовок" и "п. Текст" соответственно.

Кроме этого есть сокращённые формы для выделения текста: жирный, курсив, подчёркнутый, подстрочный, надстрочный и т.п.

И можно отметить автоматическую расстановку длинных тире и правильных кавычек.

Более подробно о модуле можно прочитать на форуме qsp.org в теме "QSP:Типограф" — модуль для форматирования текста,

или на официальной странице модуля на форуме ifiction.ru в теме "QSP: Типограф" — модуль для форматирования текста.

Полная документация на модуль здесь.

Плавное изменение цвета фона

Для реализации плавного изменения цвета фона вы можете воспользоваться готовым решением от Antipod.

Плавное изменение цвета фона аналогично по своему решению задаче по плавному проявлению текста: Плавное появление текста

Мини-игра "Взорви зомби" - пример использования локации-счётчика, также см. Действие по таймеру

Мини-игра - взорви зомби. :) Сделана для Таэль.

Ожидание взрыва осуществлено в локации-счётчике.

Важно: Помните, что ограничивая игроку время, вы можете попасть в одну из ловушек плохого гейм-дизайна. Игрок попросту ничего не успеет прочитать и сделать. А ведь это текстовые игры, в которых основное место должно занимать повествование, а не нервирование игрока. :)

Статья на сайте qsp.org: Мини-игра "Взорви зомби" - пример использования локации-счётчика

Скачать игру: Взорви зомби.qsp

Настройка окошек классического плеера с помощью qspgui.cfg

Подробную, но не полную, информацию по настройке окон классического плеера вы можете найти в статье Структура конфигурационного файла классического плеера версии 5.7.0

На форуме qsp.org так же существует тема Настройка окошек классического плеера с помощью qspgui.cfg

Если не нашли ответа

Не нашли ответа на свой вопрос? Спрашивайте здесь - Как сделать?

АВТОР: NEX

19.02.2009 09:15

Оригинал: FAQ