ЯРИЛ (Язык Разметки Интерактивной Литературы) - это парсерная платформа с визуальным редактором, не требующая редактировать исходный файл игры в текстовом редакторе. На текущий момент состоит из Редактора, Плеера и Тестера.
ЯРИЛ победил на Золотом Хомяке 2013 в номинации "Проект года" по мнению жюри!!!
Текущее состояние платформы, а также ссылки для скачивания: смотрите на вики-странице или в ветке новостей.
Архитектура игры на ЯРИЛе представляет собой множество локаций, предметов, действий (команд) и процедур обработки этих действий. Действия состоят из шаблонов команд для парсера и ссылки на процедуру. Процедура - это набор инструкций. Инструкции - это не код программы, а алгоритмическое дерево.
Редактор позволяет редактировать игру в формах, в частности: локации (название, описание, переходы), предметы (название, описание, словарь, первоначальное положение, признаки, перехваты действий), процедуры и действия:
Плеер:
Тестер (пока в зачаточном состоянии) используется для тестового прогона игр авторами в процессе разработки. Например, для игры можно написать несколько тестов для проверки различных сюжетных веток:
Проект поддерживается кросс-платформенным установщиком BitRock:
Неактивен
Привет создателю ЯРИЛА!
Хотелось бы задать несколько вопросов:
1. Можно ли в Редакторе заменить отдельные команды из библиотеки глаголов или нужно ее отклучать совсем?
2. Как задавать условия? Интересует синтаксис.
3. Какие операции с переменными (кроме присваивания) поддерживает интерпретатор? Если поддеживает, то как это реализуется на практике?
4. Стили оформления редактируются в xml?
Неактивен
В переменную можно записать значение любого выражения.
Т.е. матемаматические операции полностью поддерживаются? А, скажем, rnd будет генериться?
А динамическое изменение свойств, описания комнат, объектов поддерживается?
На сколько вообще проект будет похож на ADRIFT, если, конечно, это есть в планах? Какие планы по развитию платформы, если не секрет?
Можно. Нужно просто создать команду, которая по шаблонам будет совпадать с библиотечной.
А, кстати, где можно шаблон посмотреть? Нужно в файл библиотеки лезть? Из Редактора никак? Там, вроде, только просмотр всех глаголов доступен.
Отредактировано johnbrown (07.01.2014 22:25)
Неактивен
А что имеется в виду под динамическим изменением объектов?
Сорри, не так написал. Динамическое изменение свойств предметов (объект - контейнер, объект может быть съеден).
Неактивен
Динамического навешивания/снятия ролей пока не планировалось. Нужно ли оно?
В АДРИФТе, по-моему это реализовано. Ну, конечно, много не мало, но мне, если честно, рнд сейчас не хватает ) , ну, и справки какой-то минимальной. В АДРИФТЕ, кстати есть встроенная справка по матфункциям, очень удобно в одном клике от окна ввода. В целом, конечно, понятно,на то оно и мышинное программирование, но есть не очевидные моменты. Вообще, есть смысл сейчас писать на ЯРИЛ? Может быть такое, что новые версии не будут поддерживать старые игры?
Неактивен
В ЯРИЛе пока нет матфункций) РНД -можно сделать и пораньше. Как его будет наиболее удобно использовать?Мне кажется, он чаще всего используется для каких-то случайных событий, нежели просто для генерации случайного числа. Для случайного выбора между n-ым кол-вом альтернатив, думаю, лучшим вариантом будет создание инструкции-ветвления (типы switch или case в других языках, или множественный if), с указанием случайного выбора ветви. Или сейчас больше необходимо именно случайное число (каких-то очков, предметов и т.д.)?
Rand(x,x1)
Мне бы этого хватило, т.к., как я понял, уже сейчас можно повесить перехват событий на переменную.
Неактивен
Привет, Соник. Спасибо за генератор ,)
Скажи, а что ЯРИЛ не дружит с 7 явой?
И еще вопрос. Можно сделать, чтобы название предметов не выводилось в локации. Если установить свойство 'часть пейзажа', то предмет взять не получится .(
Неактивен
Да, так и задумано. Раз часть пейзажа, то предмет нельзя взять - он же описан в локации.
А можно сделать, чтобы предмет не выводился в описании и его можно было взять? )
Неактивен
Да, наверное, так и придется сделать.
Просто бывают ситуации, когда есть некий "неисчерпаемый" источник, например колодец или предмет условно "невидим". Было бы здорово если бы можно было установить соответствующий флаг в свойствах. Такое мое скромное пожелание )
Неактивен
ASBer написал:
условно "невидим" - это то же самое что "спрятан" ?
Для спрятанных предметов обычно есть отдельная механика.
Просто хочется, чтобы была возможность не выводить описание предметов в локации и все, но чтобы при этом с ними можно было нормально взоимодействовать без лишних процедур и тп. О механиках пока не думал. Мне кажется не нужно слишком усложнять. Надо сделать базовые кирпичики из которых пользователь сможет сам сделать какую ему нужно механику.
Немного раздражает автосохранялка (из-за случайной перезаписи я потерял обучающий файл). Может не стоит выводить список файлов? Сохранить? Ок. И все.
И еще. Я не понял, как работают шаблоны? Ориентируюсь на игру спелеолог. Там на действии срубить есть варианты глагол и два падежа в выпадающем списке. У меня в шаблонах в литерале и в объкте в списках пустота. И еще. Вот ты создал действие. Оно, по-идее, должно всплыть в перехватах в локации и в предмете. Вот, в локации действие у меня добавляется, а в прелмете нет. В чем загвоздка?
Скачал руслана&людмила и фавна, но они зашифрованы. Можно где-то сорцы взять или еще каких-нибудь игрушек для обучения?
Неактивен
Скачал новую версию. Вынос процедур и действий в основное поле, по-моему давно напрашивался. Стало удобнее. А как ты считаешь, если сделать 4 колонки на одном экране это усложнит работу с программой или наоборот облегчит, позволив сразу видеть и объекты и действия, как например в менюшном редакторе DZQ?
Пока заметил только одну ошибку. Если установить роль предмета читаемый и в верхнее поле текста ввести одинарные ковычки 'текст' то, при попытке прочитать предмет игра вылетает с ошибкой.
Планируется добавление пользовательских ролей(групп,тэгов)?
И, еще пожелание, чтобы все изменения в редакторе сразу отображались, а то приходится выходить и заново входить. Не очень удобно, но я уже привык )
Ап. Как переместить предмет в локацию? И можно его потом будет удалить стандартными средствами? Кстати, обратил сейчас внимание: чтобы взять предмет, нужно, чтобы он где-то лежал. По-моему, это не очень удобно.
Сделал перенос предмета командой локация.предмет. Теперь в описании локации мне пишет 'здесь предмет'. При этом осмотреть его нельзя 'я не знаю слова предмет'.
Соник, можешь рассказать как работают перехваты? Как я понял, если в процедуре нет инструкций, то выполняется перехват в предмете. А если есть, то не выполняется?
Кстати, в процессе написания понял, что не хватает ивентов. Они бы прекрасно работали с процедурами, но ты, наверное, уже об думал.
Баг: процедуру можно сделать безымянной. Редактор никак не прореагирует. Переименовать не получится, только удалить.
В имени переменной почему-то нельзя использовать символ нижнего подчеркивания.
Какой синтаксис/команды используются для работы с ролями?
У действий есть исключения (или как-то так, не помню). Можно сделать, чтобы если действие написано пользователем не полностью выдавалась обработка из исключения? Меня синтаксис интересует. Вообще, к этому больше всего вопросов, особенно к проверкам условий. Хорошо, есть примеры, но они не всегда спасают, приходится самому додумывать.
В условии допустимо только одно условие?
Отредактировано johnbrown (22.12.2014 09:09)
Неактивен
Да, планируется добавление пользовательских ролей. А что подразумевается под группами и тэгами?
Я имел в виду одно и тоже - возможность навесить на предметы некий признак, тэг. Чтобы объединить схожие группы предметов, чтобы не делать лишней работы с перечислением предметов в условиях. Там даже механики никакой не нужно, просто обычный тэг.
И, еще пожелание, чтобы все изменения в редакторе сразу отображались, а то приходится выходить и заново входить. Не очень удобно, но я уже привык )
Не понял, а что не отображается? Вообще, в редакторе есть пункт меню "Запустить в Плеере" - туда попадает текущая игра (сохраняется во временный файл и загружается в Плеере).
Посмотри процедуры или действия. Внутри них изменения становятся видны визуально только если закрыть и открыть их соответственно, хотя по-факту, да, сразу все изменяется.
Кстати, обратил сейчас внимание: чтобы взять предмет, нужно, чтобы он где-то лежал. По-моему, это не очень удобно.
Не совсем понял.
Я проверял. Чтобы переместить предмет, к примеру, к себе в инвентарь, этот предмет должен быть к чему-то приписан. Т.е., изначально он может висеть в воздухе, редактор это позволяет, но тогда передачи не произойдет. Мне кажется, это не совсем правильно.
Сделал перенос предмета командой локация.предмет. Теперь в описании локации мне пишет 'здесь предмет'. При этом осмотреть его нельзя 'я не знаю слова предмет'.
А у него настроен словарь?
Конечно, есть словарь с синонимами.
Я думал про ивенты типа "изменилась переменная" или "игрок зашёл в локацию". Но это пока было на уровне мыслей. А чего именно хотелось бы?
А все, что сейчас позволяет процедура, все забабахать в ивенты. Нужны процедуры, срабатывающие автоматически, при наступлении условия.
Какое условие ты имеешь в виду? Вообще, выражения поддерживают логические операторы: и, или, не.
Да, это я имел в виду.
У действий есть ограничения. Они проверяются по очереди при попытке выполнить действие. Если условие какого-то из ограничений будет истинным (логическое "да"), то выполняются инструкции ограничения, а действие и остальные ограничения уже не выполняются. Пример - в Руслане и Людмиле действие "трубить".
Вот, скажем есть некий шаблон: глагол + предмет.ип. Я могу сделать такое ограничение, если пользователь не указал предмет (просто написал глагол)?
если предмет.ип = '' то "Что я должен' + глагол + '?'
ЗЫ можно создать отдельный топик по чисто-техническим вопросам реализации языка.
Отредактировано johnbrown (22.12.2014 17:45)
Неактивен