Открыть главное меню

Изменения

FireURQ:Руководство пользователя

30 996 байт добавлено, 18:43, 31 июля 2020
м
убрал лишнее слово "выдает"
=Метки=
 
Метка - одно из важнейших понятий URQL. Она служит для выделения места в квесте, куда затем предстоит перейти. Любые перемещения в квесте могут быть либо на следующий оператор, либо на метку. Все метки имеют имена, чтобы потом можно было указывать, куда вы хотите перейти.
Определяется метка при помощи двоеточия. Все, что правее этого символа, до разделителя, которым является символ конец абзаца (Enter) или '&' - имя метки:
''':Имя_метки'''
 
Метка и следующий за ней оператор end являются принятой единицей измерения игры - локацией. Между ними обычно пишется описание локации и переходы из неё в другие локации.
 
''':начало'''
'''end'''
 
Например, допустимыми именами меток являются:
 
''':1'''
''':01'''
''':а'''
''':кот1'''
''':@(a)%^Очень_Длинная_и_Запутанная_метка_какими-лучше-не-пользоваться!!!!!_horror_так_как_сами_потом_забудете_как_она_называется!Или_сделаете_ошибку!'''
'''Вы_же_можете_сделать_маленькую_ошибку_в таком_длинном_названии?'''
''':house_flat1'''
 
'''''Примечание:''''' метка должна начинаться с начала строки и отделяться от других операторов (Enter) или '&', регистр имени метки не важен.
 
:BIG
:bIG
:Big
:big
- все эти метки для интерпретатора совершенно одинаковы. Но лучше, в целях собственного удобства, придерживаться единого стиля.
В метке лучше не делать пробелов. Длина метки не ограничена, но для удобства автора квеста лучше не делать меток длиннее строки. В метке допускаются символы, обозначающие буквы русского и латинского алфавита, цифры, знак подчеркивания и знаки арифметических операций + и - (лучше не злоупотреблять странными названиями).
 
Недопустимы символы ''';''' '''/*''' '''*/''' '''&'''
 
Грамотное использование имен меток способно серьезно облегчить работу автора.
 
=Текст=
==Вывод текста==
Результат:
Моя грамотность была на исходе; но, несмотря на это, я поставил точку с запятой в предложении.
 
Хочу напомнить, что если бы мы написали в коде просто:
'''pln''' Моя грамотность была на исходе; но, несмотря на это, я поставил точку с запятой в предложении.
То получили бы на экране:
Моя грамотность была на исходе
Потому что символ ";" и все что после него идет было бы обработано как комментарий.
 
'''Примечание:'''
Вывод строковой переменной, как числа '''#текстовая_переменная$''' даст нам количество символов в строке.
==Оформление текста==
Для определения шрифта, которым будет выводиться текст, используется переменная '''textfont'''. В нее в виде строкового значения следует записать имя файла шрифта.
Все используемые игрой шрифты должны лежать в папке с игрой, либо архиве QSZ. '''FireURQ''' позволяет имеет встроенные шрифты с засечками (serif) и без засечек (sans) во всех начертаниях — полужирном (bold), наклонном (italic) и полужирном наклонном (bold-italic).  Чтобы использовать обычные True Type эти шрифты Windows. Для этого шрифт должен быть либо установлен в системеигре, либо лежать в папке достаточно написать '''textfont = «serif-italic[25]»''' и у вас будет наклонный шрифт 25-го размера с игрой (архиве QSZ)засечками
Формат использования шрифта такой:
'''textfont = "file.ttf[<size>, <gamma>, <weight>, <bgcolor>]'''
*'''size''' – размер шрифта(по умолчанию '''19'''), а точнее высота строки в пикселях
*'''gamma''' – гамма, т.е. "светлость" границ шрифта(по умолчанию '''1.0''')
*'''weight''' – толщина(по умолчанию '''0.6''')
'''pln Крокодил зарылся в ил, крокодила ил манил'''
В результате получаем текст про крокодила, написанный нужным нам шрифтом. Однако, размер в 19 кегльпикселей, используемый по умолчанию выглядит мелко, поэтому сделаем размер шрифта покрупнее, чтобы все видели издалека эту прекрасную скороговорку.
Меняем размер шрифта на 42:
'''textfont = "georgia.ttf[42]"'''
''; Иногда эту переменную удобно использовать при отладке игры, временно выводя в нее, к примеру, значения других переменных.''
 
= Переходы =
 
Любой текстовый квест можно разбить на локации с текстом и переходы между ними. Из каждой локации к другим локациям обычно ведет несколько переходов, которые обозначают некоторые альтернативные варианты действий. В этой главе мы рассмотрим способы, которыми URQL позволяет сделать переходы в игре.
 
==Переход по кнопкам (оператор BTN)==
 
Самый распространённый переход осуществляется с помощью кнопок.
Кнопки всегда расположены после выведенного текста и используются для переходов по меткам.
'''''Примечание: лучше ставить между текстом и кнопками лишний оператор''''' '''pln''' - '''''так ваша игра будет выглядеть гораздо лучше.'''''
 
Общее обозначение: btn <локация>, <надпись на кнопке>]
 
Где <локация> - имя метки, на которую будет совершен переход, <надпись на кнопке> - надпись на кнопке, которая отображается на экране. В случае если <надпись на кнопке> не указана, в качестве надписи используется название метки, куда ведет кнопка.
 
'''''Пример:'''''
'''btn лес,Войти в лес'''
Эта команда выведет на экран кнопку с текстом '''Войти в лес''', ведующую на локацию '''лес'''
 
'''''Примечание 1: пробелы до и после надписи на кнопке игнорируются.'''''
 
'''''Примечание 2: если локация не найдена, то кнопка выводится с пометкой // phantom.'''''
 
'''''Примечание 3: при наличии локации common (см. ниже) сначала выполняются операторы на локации common, потом осуществляется переход на метку локации.'''''
 
У кнопок есть так называемое "эхо". Это сообщение, выводящееся на экран о том, что вы перешли по кнопке. Чтобы оно не выводилось, следует использовать переменную '''hide_btn_echo'''. Если установить её в единицу, то сообщения показываться не будут.
 
'''''Пример:'''''
'''hide_btn_echo = 1'''
 
===Команда CLSB===
 
Бывает так, что нам не нужно очищать весь экран, а нужно стереть только кнопки действий. Для того чтобы удалить кнопки выведенные командой '''BTN''', существует команда '''CLSB'''. У нее нет никаких параметров.
 
Пример:
'''btn север, Идти на Север'''
'''clsb'''
'''btn юг, Идти на Юг'''
 
Результат (текст на выведенной кнопке):
'''Идти на Юг'''
&nbsp;
 
===Оформление кнопок в Fireurq===
 
Оформление кнопок делается в файле skin.xml
Описание можно найти в статье [[FireURQ:Скины|FireURQ:Скины]].
 
==Переход по ссылке==
 
FireURQ позволяет использовать в тексте (и декораторах) ссылки.
 
'''''Формат ссылок:'''''
'''<nowiki>[[текст ссылки|название локации]]</nowiki>'''
 
'''''Пример:'''''
'''pln Вы стоите рядом с покосившимся <nowiki>[[домиком|домик_осмотреть]]</nowiki>. Вокруг раскинулись <nowiki>[[клумбы с аромантными цветами|клумбы_осмотреть]]</nowiki>.'''
 
Здесь '''домик_осмотреть''' и '''клумбы_осмотреть''' - названия локаций, на которые будут осуществляться переходы при нажатии на ссылку.
 
Цвет ссылок задаётся переменными linkcolor и linkhcolor. Первая отвечает за цвет ссылки в тексте, а вторая - за цвет ссылки при наведении мыши.
 
'''''Пример:'''''
'''linkcolor = 0xffffff'''
'''linkhcolor = 0x0000ff'''
В данном примере цвет ссылок в тексте будет белым, а при наведении станет синим.
 
Невалидные ссылки (указывающие на несуществующую локацию) всегда подсвечены красным цветом.
 
'''''Упрощенный формат вывода ссылок такой:'''''
'''<nowiki>[[текст ссылки]]</nowiki>'''
 
В данном случае ссылка будет вести на метку под названием "текст ссылки".
 
'''''Пример:'''''
'''pln На волнах раскачивается деревянная <nowiki>[[лодка]]</nowiki>.'''
 
Здесь, при клике на ссылку произойдет переход на метку "лодка".
 
'''''Замечание: не рекомендуется называть метки именами с пробелами, соответственно не стоит использовать ссылки типа <nowiki>[[деревянная лодка]]</nowiki>, которые ведут на локации с такими именами.'''''
 
У ссылок, как и у btn есть "эхо", то есть в окне игры пишется, что вы перешли по ссылке. Чтобы его отключить, следует использовать переменную '''hide_link_echo'''. Если установить её в 1, то "эхо" выводиться не будет.
 
'''''Пример:'''''
'''hide_link_echo = 1'''
 
'''''Примечание: при наличии локации common (см. ниже) сначала выполняются операторы на локации common, потом осуществляется переход на метку локации.'''''
 
==Переход по оператору GOTO==
 
'''''Синтаксис:'''''
'''GoTo Метка'''
 
После выполнения оператора '''goto''' происходит мгновенное перемещение на указанную метку. При наличии локации common (см. ниже) операторы на локации common при переходе по '''goto''' НЕ ВЫПОЛНЯЮТСЯ. Это сделано специально и умышленно - чтобы можно было делать переходы внутри локации.
 
Примечание: в случае не нахождения метки, goto просто игнорируется.
 
'''''Пример:'''''
'''goto лес'''
Этот код произведёт перемещение на локацию с названием ''''лес'''.
 
==Переход по оператору PROC==
 
'''''Синтаксис:'''''
'''Proc Метка'''
 
При вызове данного оператора происходит переход на указанную метку и выполнение программы, до встречи первого end, потом управление передается оператору, следующему непосредственно за '''proc''', откуда команда была вызвана. Допустима любая вложенность '''proc'''-вызовов (вплоть до использования рекурсии!).
 
Нормально обрабатываются последовательные переходы по '''proc''' - цепочка ведется до тех пор, пока не встретится первый end. При этом кнопки во всех пройденных локациях накапливаются(!), но при обнаружении end'а происходит не опрос пользователя, а возврат к предыдущему proc'у и так до самого начала цепочки.
 
'''''Пример:'''''
''':берег_реки'''
'''pln Вы стоите на берегу реки, позади вас Туманный лес.'''
'''proc лес'''
'''pln Отсюда только одна дорога - на запад.'''
'''end'''
''';----------'''
''':лес'''
'''pln Из леса на вас поглядывают волки.'''
'''end'''
 
При выполнении этот код выведет на экран следующее:
 
Вы стоите на берегу реки, позади вас Туманный лес.
Из леса на вас поглядывают волки.
Отсюда только одна дорога - на запад.
 
То есть, после выполнения по '''proc''' локации '''лес''', мы вернёмся в локацию '''берег_реки''' и продолжим с того места, на котором был вызов команды '''proc'''.
'''''Важно:''''' При наличии локации common (см. ниже) операторы на локации common при переходе по '''proc''' НЕ ВЫПОЛНЯЮТСЯ и системная переменная '''current_loc''' не меняется.
 
'''Примечание:''' Часто из метки вызванной с помощью '''proc''' ведёт вызов '''goto''' и далее. В таком случае, если мы не хотим возврата к первой локации, нужно использовать оператор '''forget_procs'''
 
==Переход по декораторам TEXTBUTTON и IMGBUTTON==
 
Описание можно найти в статье [[FireURQ:Особенности_реализации_URQL|FireURQ:Особенности_реализации_URQL]]. В разделе '''Декораторы'''.
 
==Контекстное меню==
 
Описание можно найти в статье [[FireURQ:Особенности_реализации_URQL|FireURQ:Особенности_реализации_URQL]]. В разделе '''Выпадающие меню'''.
 
==Параметры при переходах==
 
Локальные параметры при переходах возможно передать параметры.
 
Общее обозначение: <метка>(param1, param2, ...)
 
В качестве параметров могут быть использованы любые выражения. Параметры при этом попадают в переменные <метка>_1, <метка>_2 и так далее. Все старые значения "переменных с параметрами" — удаляются (даже если в прошлый раз было больше параметров).
 
Важное замечание: при использовании параметров в операторе btn подстановки (#...$ и #%...$) раскрываются ПРИ ДОБАВЛЕНИИ КНОПКИ, а вычисление выражений в параметрах производится ПРИ НАЖАТИИ НА КНОПКУ.
 
'''''Пример:'''''
'''btn лес(1,"опушка"),Войти в лес'''
На локации '''лес''', переменные '''лес_1''' и '''лес_2''' будут соответссвенно равны '''1''' и '''опушка'''
 
то есть, если мы напишем код:
''':лес'''
'''pln #лес_1$ и #%лес_2$'''
'''end'''
то в результате, при переходе по кнопке, увидим на экране:
'''1 и опушка'''
 
Параметры при переходах очень удобны для организации проверок внутри локации.
 
'''''Замечание:''''' Если вы передаёте параметры метке, то её название не должно начинаться с цифры, то есть исключены названия вроде '''25''' или '''40метро'''. Если вы хотите использовать цифры в названии, то ставьте их после букв, к примеру - '''метро40'''.
 
= Музыка и звук =
 
В '''FURQ''' есть целый ряд команд для воспроизведения аудио. Оно может быть всевозможных форматов: WAV, AIFF, MP3, MP2, MP1, OGG, MIDXM, IT, S3M, MOD, MTM, UMX. Есть возможность тонкого регулирования громкости звука.
 
Для начала запасемся на ресурсах, где свободно распространяют звуки (например, www.freesound.org) или запишем сами материала для проигрывания.
 
==Play==
 
Команда '''Play''' используется для проигрывания аудиофайлов формата WAV/AIFF/MP3/MP2/MP1/OGG
 
Формат команды:
'''play [loop|stop] [<имя файла>[, <громкость>]]'''
 
Чтобы просто запустить звук на проигрывание с помощью play напишите после команды имя файла. Например, нужно проиграть некий звук крокодила ''alligator.ogg''. Для этого пишем:
'''play alligator.ogg'''
 
Если файл alligator.ogg лежит рядом с файлом игры, то мы услышим нечто. Но если мы для удобства положим все звуки в отдельную папку sounds, то придется написать так:
'''play sounds/alligator.ogg'''
 
В нашем примере звук крокодила будет звучать всего один раз, однако, при помощи параметра '''loop''' мы сможем заставить крокодила двигаться и звучать бесконечно:
'''play loop sounds/alligator.ogg'''
 
Теперь звук будет повторяться снова и снова. Остановить его сможет только параметр '''stop''':
'''play stop sounds/alligator.ogg'''
 
При помощи '''Play''' можно одновременно проигрывать несколько звуков. Кроме того, можно регулировать громкость звука, добавив к команде play через запятую значение от '''0''' (полная тишина) до '''255''' (максимальная громкость). По умолчанию, '''play''' играет аудио с максимальной громкостью.
 
К примеру, мы хотим, одновременно наслаждаться звуком крокодила и чмоканием болота, но так, чтобы крокодил был слышен громче:
'''play loop sounds/alligator.ogg'''
'''play loop sounds/swamp.wav, 100'''
 
Чтобы остановить сразу все звуки, запущенные командой '''play''', мы применим такую на первый взгляд абсурдную команду как:
'''play stop'''
 
''; Важно помнить, что звуки запущенные на одной локации через '''play''' с параметром '''loop''' без новой команды с параметром '''stop''' сами собой не прекратятся, даже если вы перешли на другую локацию. И если вы вдруг оттуда вернетесь на прежнюю локацию, то те же самые звуки запустятся еще раз. Добро пожаловать в какафонию.''
 
==Voice==
 
Команда '''Voice''' используется для проигрывания аудиофайлов формата WAV/AIFF/MP3/MP2/MP1/OGG
 
Формат команды:
'''voice <имя файла>'''
'''voice stop'''
 
Команда предназначена специально для озвучивания игры голосом. Например, ей удобно запускать записи реплик персонажей или рассказчика. Во многом она аналогична команде '''play''', но с несколькими важными особенностями:
Проигрывать можно только одну реплику/звук одновременно(запуск другой озвучки через команду voice останавливает предыдущую).
 
Переход на другую локацию по кнопке ('''btn''') останавливает озвучку.
 
Громкость здесь регулируется числовой переменной '''voice_volume''' (от '''0''' до '''255''').
 
Остановить проигрывание файла можно при помощи команды '''voice stop'''.
 
Если вам необходимо чтобы прозвучало несколько реплик на одной локации, то достаточно удобно использовать команду voice в связке с командой '''anykey'''. Прослушав реплику, игрок будет нажимать на любую клавишу и слушать следующую.
 
Например:
 
'''voice_volume=200'''
'''pln - Еще раз здравствуй. - сказал крокодил и придвинулся поближе.'''
'''voice sounds/helloagain.ogg'''
'''anykey'''
'''pln Вам стало не по себе.'''
'''voice sounds/SCREAM.wav'''
 
==Music==
 
Кроме форматов аудиофайлов, которые воспроизводят команды '''play''' и '''voice''', команда '''music''' проигрывает еще и трекерную музыку (XM, IT, S3M, MOD, MTM, UMX), MIDI-файлы (MID) и MO3.
 
Формат команды:
'''music <имя файла>|stop[, <время в миллисекундах>]'''
 
Зацикливание проигрывания устанавливается в переменной music_looped ('''0''' - играть один раз, '''1''' - играть бесконечно). По умолчанию, вот отличие от команд '''play''' и '''voice''', здесь музыка зациклена.
 
''; некоторые файлы трекерной музыки зациклены сами по себе, с помощью внутренних команд формата. Такие файлы будут играть по кругу вне зависимости от переменной '''music_looped'''.
 
''Громкость воспроизведения регулируется переменной music_volume (от '''0''' до '''255''').
 
С помощью команды '''music''' можно проигрывать только один файл одновременно, однако, можно задавать время, в течении которого громкость следующего аудиофайла будет нарастать (или угасать – в зависимости от того, включаем мы воспроизведение, или выключаем). Если музыка уже звучит и мы запускаем новый трек с указанием времени нарастания громкости, то будет исполнен эффект '''crossfade''' – старый трек будет угасать, а новый – нарастать по громкости.
 
Так “'''music stop'''” останавливает воспроизведение музыки. А если указать в качестве параметра время, то воспроизведение остановится через заданный промежуток.
'''music stop, 1500 ''; остановить музыку через 1,5 секунды'''''
 
===fademusic===
 
С помощью команды '''fademusic''' можно добиться плавного и красивого изменения громкости музыки.
Формат команды:
'''fademusic <громкость>, <время в миллисекундах>'''
громкость – целевая громкость музыки.
 
время в миллисекундах – время, в течении которого громкость достигнет целевого значения.
 
Предположим, что мы хотим сделать красивое и удобное включение и выключение музыки в нашей игре. Для этого используем [[инвентарь]] '''URQ'''. Игрок в любой момент сможет через пункт меню инвентаря включить и выключить музыку, а мы постараемся, чтобы это было плавно. На самом деле выключать музыку совсем мы не будем, а будем только понижать громкость до нуля, но зато нам не придется задаваться вопросом какой именно файл запускать при включении музыки.
 
В начале игры создадим элемент инвентаря “музыка” и присвоим ему наклейку “выключить музыку”:
'''inv+ музыка'''
'''idisp_музыка = "выключить музыку"'''
Запускаем любую музыку, в любом месте игры:
'''music music\Joe Hisaishi - Пылью на твоих руках.mp3'''
Теперь, в локации, которая отвечает за наш элемент инвентаря “музыка” используем оператор '''fademusic''':
''':Use_музыка'''
'''if idisp_музыка == "включить музыку" then idisp_музыка = "выключить музыку" & fademusic 255, 1500 else idisp_музыка = "включить музыку" & fademusic 0, 1500'''
'''end'''
Теперь по нажатию на “выключить музыку” громкость будет плавно затихать до нуля за 1,5 секунды, а по нажатию на “включить музыку” - так же плавно возрастать.
 
=Функции=
 
==Случайное значение Rnd==
 
Иногда полезно - особенно, если не злоупотреблять этим, ввести в квест элемент случайности, непредсказуемости. Именно для этого был введен механизм случайности: Rnd[x] - системная переменная (только для чтения) которая при пустом значении x хранит в себе случайное значение от 0 до 1, включая 1, а при целом x (к примеру, X=6) выдает целые значения (от 1 до 6 включительно в нашем случае). При каждом обращении к переменной она принимает другое значение.
 
'''случай1 = rnd''' ;В результате переменная случай1 равна, например, 0.78
 
'''случай2 = rnd4''' ;В результате переменная случай2 равна, например, 3
 
==Ввод текста INPUT==
 
В урке есть возможность ввести строку, значение которой будет потом присвоено указанной переменной.
 
При необходимости ввести с клавиатуры русский текст через оператор '''input''' в строковую переменную ее следует предварительно объявить выражением:
'''строка = ""'''; Данное выражение создает строковую переменную нулевой длины.
 
'''pln Введите строку: & input строка'''
 
На экране мы увидим:
'''Введите строку:'''
 
==Команда forget_procs==
 
В URQL есть нюанс - если мы используем '''goto метка''' из локации вызванной по '''proc''', то история вызовов не забывается.
Но есть команда '''forget_procs''', которая позволяет это исправить.
 
Рассмотрим следующий код:
 
:пример
pln Выводим текст 1
proc выход1
pln Выводим текст 2
end
 
:выход1
goto выход2
end
 
:выход2
forget_procs ; вставляем для того, чтобы забыть предыдущие действия
pln Выводим текст 3
end
 
Без команды '''forget_procs''' мы увидим на экране
 
Выводим текст 1
Выводим текст 3
Выводим текст 2
 
Если же мы используем эту команду, то на экране появится:
 
Выводим текст 1
Выводим текст 3
 
что чаще всего и нужно.
 
 
[[Категория:Документация FireURQ]]
156
правок