Переходы
Игрок исследует игровой мир, или следует по сюжету игры, перемещаясь по локациям. Задача автора игры — правильно прописать эти перемещения.
Для перемещения между локациями в QSP предусмотрены специальные команды. Эти команды можно использовать в любом месте игры, но как правило, их размещают в действиях, чтобы позволить игроку самому решать, куда он хочет переместиться.
Команды для перемещения между локациями
GOTO [$локация]— переход на локацию с названием[$локация].-
Пример:
! переход на локацию "Тронный зал"goto 'Тронный зал' -
При переходе на указанную локацию с помощью команды GOTO происходит следующее:
- Очистка Окна основного описания и очистка Окна действий.
- Вывод в Окно основного описания текста из поля "Базовое описание" локации (поле "Описание" в QGen).
- Вывод в Окно действий действий из поля "Базовые действия"
- Выполнение кода из поля Выполнить при посещении
-
Команда
GOTOимеет краткую записьGT. Пример:goto "тёмный_лес"! эквивалентноgt "тёмный_лес" -
При переходе, на локацию можно передав ать до девятнадцати значений вместе с командой
GOTO. Значения перечисляются по порядку через запятую после названия локации:GOTO [$локация],[аргумент 0],[аргумент 1], ... ,[аргумент 18]Передаваемые на локацию значения называются аргументами или параметрами. Эти значения плеер автоматически помещает в специальный массив
ARGS[]в ячейки с нулевой по восемнадцатую. Пример:# начало! это код локации началоact "Начать игру":! при нажатии на действие игрок перейдёт на локацию "комната"goto "комната","начало" & ! на локацию комната будет передана строка со словом "начало"end--- начало ---# комната! это код локации комната$откуда_пришли=$args[0] & ! из $args[0] получаем значение, переданное с командой gotoif $откуда_пришли="начало":! если пришли с локации "начало", выводим душещипательную катсценуpl "Здесь начинается наша история"else! если пришли не с локации "начало", просто выводим описание комнатыpl "Описание комнаты"end--- комната ---
-
XGOTO [$локация]- переход на локацию с названием[$локация]БЕЗ очистки Окна основного описания.-
Пример:
! переход на локацию "разговор с начальником"xgoto 'разговор с начальником' -
При переходе на указанную локацию с помощью команды
XGOTOпроисходит следующее:- Очистка Окна действий.
- Вывод в Окно основного описания текста из поля Базовое описание локации (поле Описание в QGen). Новое описание дополняет уже имеющееся.
- Вывод в Окно действий действий из поля Базовые действия
- Выполнение кода из поля Выполнить при посещении
-
Команда
XGOTOимеет краткую записьXGT. Пример:xgoto "дремучая_чаща"! эквивалентноxgt "дремучая_чаща" -
При переходе, на локацию можно передавать до девятнадцати значений вместе с командой
XGOTO. Значения перечисляются по порядку через запятую после названия локации:XGOTO [$локация],[аргумент 0],[аргумент 1], ... ,[аргумент 18]Передаваемые на локацию значения называются аргументами или параметрами. Эти значения плеер автоматически помещает в специальный массив
ARGS[]в ячейки с нулевой по восемнадцатую. Пример:! локация "разговор с начальником"$вариант = $args[0] & ! первое значение помещаем в переменную вариантсчётчик = args[1] & ! второе значение — в переменную счётчикact "— Можно задать вам вопрос?":*pl 'Я: — Можно задать вам вопрос?'xgoto 'разговор с начальником', 'можно?', счётчик + 1endif $вариант = 'можно?':if счётчик = 1:'Начальник: — Задавайте.'else:'Начальник: — Вы это уже спрашивали.'endelse:'Начальник: — С чем пожаловали?'end
-
Использование массива ARGS для действий и гиперссылок
Вы можете использовать значения из массива ARGS не только в коде локации, на которую был осуществлён переход, но так же и в гиперссылках, выведенных на экран и в действиях. Примеры:
args[0] = 12
act 'Show args[0]':
*pl args[0] & ! на экране увидим 12
end
! щелчки по гиперссылке будут увеличивать значение args[1]
'<a href="EXEC:args[1] += 1">Прибавить число</a>'
! а если щёлкнуть по этой гиперссылке,
! значение args[1] появится в дополнительном описании:
'<a href="EXEC:pl args[1]">Узнать число</a>'
Точно так же, как и для любой другой локации, массив ARGS уникален для текущей локации, и будет полностью уничтожаться при переходе на новую локацию.
Это позволяет хранить и использовать необходимые данные только на одной локации. Например, можно записывать в ARGS многострочный код QSP и выполнять его из гиперссылок с помощью dynamic.
$args[21] = {
if no деньги<100:
addobj 'Кружка имбирного эля'
кружка_эля += 1
деньги -= 100
*pl "Я приобрёл кружку имбирного эля."
else
*pl "Мне не хватает денег на эль."
end
}
*pl "<a href='exec:dynamic $args[21]'>Купить кружку имбирного эля</a>"
Команды посещения локаций
Иногда нам нужно прервать выполнение определённого кода, выполнить код на другой локации, а затем вернуться и продолжить выполнять прерванный код. В таких случаях операторы GOTO и XGOTO нам не подход ят, ведь они осуществляют переход на локацию и оставляют нас на ней.
В QSP есть более подходящие для таких ситуаций команды, они подробно описаны в разделе "Пользовательские функции и процедуры".