Игрок исследует игровой мир, или следует по сюжету игры, перемещаясь по локациям. Задача автора игры — правильно прописать эти перемещения.
Для перемещения между локациями в QSP предусмотрены специальные команды. Эти команды можно использовать в любом месте игры, но как правило, их размещают в действиях, чтобы позволить игроку самому решать, куда он хочет переместиться.
GOTO [$локация]
— переход на локацию с названием [$локация]
.! переход на локацию "Тронный зал" goto 'Тронный зал'
GOTO
имеет краткую запись GT
. Пример: goto "тёмный_лес" ! эквивалентно gt "тёмный_лес"
GOTO
. Значения перечисляются по порядку через запятую после названия локации: GOTO [$локация],[аргумент 0],[аргумент 1], ... ,[аргумент 18]Передаваемые на локацию значения называются аргументами или параметрами. Эти значения плеер автоматически помещает в специальный массив
ARGS[]
в ячейки с нулевой по восемнадцатую. Пример: # начало ! это код локации начало act "Начать игру": ! при нажатии на действие игрок перейдёт на локацию "комната" goto "комната","начало" & ! на локацию комната будет передана строка со словом "начало" end --- начало --- # комната ! это код локации комната $откуда_пришли=$args[0] & ! из $args[0] получаем значение, переданное с командой goto if $откуда_пришли="начало": ! если пришли с локации "начало", выводим душещипательную катсцену pl "Здесь начинается наша история" else ! если пришли не с локации "начало", просто выводим описание комнаты pl "Описание комнаты" end --- комната ---
XGOTO [$локация]
- переход на локацию с названием [$локация]
БЕЗ очистки Окна основного описания.! переход на локацию "разговор с начальником" xgoto 'разговор с начальником'
XGOTO
происходит следующее:XGOTO
имеет краткую запись XGT
. Пример: xgoto "дремучая_чаща" ! эквивалентно xgt "дремучая_чаща"
XGOTO
. Значения перечисляются по порядку через запятую после названия локации: XGOTO [$локация],[аргумент 0],[аргумент 1], ... ,[аргумент 18]Передаваемые на локацию значения называются аргументами или параметрами. Эти значения плеер автоматически помещает в специальный массив
ARGS[]
в ячейки с нулевой по восемнадцатую. Пример: ! локация "разговор с начальником" $вариант = $args[0] & ! первое значение помещаем в переменную вариант счётчик = args[1] & ! второе значение — в переменную счётчик act "— Можно задать вам вопрос?": *pl 'Я: — Можно задать вам вопрос?' xgoto 'разговор с начальником', 'можно?', счётчик + 1 end if $вариант = 'можно?': if счётчик = 1: 'Начальник: — Задавайте.' else: 'Начальник: — Вы это уже спрашивали.' end else: 'Начальник: — С чем пожаловали?' end
Вы можете использовать значения из массива 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 есть более подходящие для таких ситуаций команды, они подробно описаны в разделе "Пользовательские функции и процедуры".