ЯРИЛ (Язык Разметки Интерактивной Литературы) - это парсерная платформа с визуальным редактором, не требующая редактировать исходный файл игры в текстовом редакторе. На текущий момент состоит из Редактора, Плеера и Тестера.
ЯРИЛ победил на Золотом Хомяке 2013 в номинации "Проект года" по мнению жюри!!!
Текущее состояние платформы, а также ссылки для скачивания: смотрите на вики-странице или в ветке новостей.
Архитектура игры на ЯРИЛе представляет собой множество локаций, предметов, действий (команд) и процедур обработки этих действий. Действия состоят из шаблонов команд для парсера и ссылки на процедуру. Процедура - это набор инструкций. Инструкции - это не код программы, а алгоритмическое дерево.
Редактор позволяет редактировать игру в формах, в частности: локации (название, описание, переходы), предметы (название, описание, словарь, первоначальное положение, признаки, перехваты действий), процедуры и действия:
Плеер:
Тестер (пока в зачаточном состоянии) используется для тестового прогона игр авторами в процессе разработки. Например, для игры можно написать несколько тестов для проверки различных сюжетных веток:
Проект поддерживается кросс-платформенным установщиком BitRock:
Неактивен
Vladimir написал:
После переустановки винды с Vista на 7 версию ваша ЯРИЛ успешно инсталлируется. Хотелось бы иметь к платформе инструкцию для разработки игр.
Инструкции пока нет... Что-то можно сделать в Редакторе, что-то пока только в файле игры (xml). Спрашивайте, что не понятно, расскажу, что к чему!
Будем работать над инструкцией...
Неактивен
Вообще, ещё есть страничка для обсуждения проблем, предложений http://ifml2.reformal.ru/
UPD. Заменил на актуальную страницу http://ifml2.reformal.ru/
Неактивен
Новая версия Прототип 10 выпуск 1.
Изменения:
Отличия от 9го прототипа (с 05.09.2012):
д + Теперь работают роли на уровне Движка.
д + В роли добавлены триггеры для проверки доступности вложенных объектов.
к + Роль "контейнер" теперь проверяет, закрыт ли контейнер, и выводит описание вложенных предметов в зависимости от этого.
д + Инструкция "Вернуть значение" (return) для возврата результата, например, из триггеров.
д + Орператор "в" для проверки, входит ли предмет в коллекцию.
к + В игре "ZorkPort" можно открывать ящик и читать письмо.
д + Коллекция "Пустота" для симуляции создания и удаления объектов.
д * Улучшено вылавливание ошибок.
я ~ Папка Samples теперь называется Games.
д + Добавлено подробное логирование в файл ifml2.log.
ifml2-53426 контейнер и плоскость:
д + у объекта можно проверять наличие роли, а также получать значение свойства, данное ролью
к + "осмотреть" теперь описывает и лежащие сверху предметы
Неактивен
Загрузка...
Произошла ошибка: java.lang.NullPointerException
at ifml2.om.Hook.toString(Hook.java:47)
at java.text.MessageFormat.subformat(Unknown Source)
at java.text.MessageFormat.format(Unknown Source)
at java.text.Format.format(Unknown Source)
at java.text.MessageFormat.format(Unknown Source)
at ifml2.FormatLogger.debug(FormatLogger.java:28)
at ifml2.om.OMManager$1.afterUnmarshal(OMManager.java:47)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.fireAfterUnmarshal(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.StructureLoader.leaveElement(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.endElement(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.endElement(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(Unknown Source)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source)
at ifml2.om.OMManager.loadStoryFromXmlFile(OMManager.java:84)
at ifml2.engine.Engine.loadStory(Engine.java:60)
at ifml2.players.guiplayer.GUIPlayer.loadStory(GUIPlayer.java:114)
at ifml2.players.guiplayer.GUIPlayer.main(GUIPlayer.java:103)
at ifml2.Launcher.main(Launcher.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.exe4j.runtime.LauncherEngine.launch(Unknown Source)
at com.exe4j.runtime.WinLauncher.main(Unknown Source)
at com.install4j.runtime.launcher.WinLauncher.main(Unknown Source)
Неактивен
Нашёл, это был "Спелеолог". Вот исправленная версия - Прототип 10 выпуск 2
Неактивен
Привет создателю ЯРИЛА!
Хотелось бы задать несколько вопросов:
1. Можно ли в Редакторе заменить отдельные команды из библиотеки глаголов или нужно ее отклучать совсем?
2. Как задавать условия? Интересует синтаксис.
3. Какие операции с переменными (кроме присваивания) поддерживает интерпретатор? Если поддеживает, то как это реализуется на практике?
4. Стили оформления редактируются в xml?
Неактивен
Привет
johnbrown написал:
1. Можно ли в Редакторе заменить отдельные команды из библиотеки глаголов или нужно ее отклучать совсем?
Можно. Нужно просто создать команду, которая по шаблонам будет совпадать с библиотечной. При поиске подходящего шаблона сначала рассматриваются команды истории и только потом команды библиотек. Также ещё можно перехватить в локациях или предметах любые команды - если, к примеру, нет необходимости полностью переделывать логику команды для всех предметов/мест, а только для некоторых.
johnbrown написал:
2. Как задавать условия? Интересует синтаксис.
Синтаксис подобен выражениям в других компьютерных языках - он почти математический + некоторые особенности. Поддерживаемые операции:
с логическими величинами - "и", "или", "не";
проверка вхождения элемента в коллекцию - "в";
получение значения свойства - точка (".") - используется в виде <объект>.<свойство>;
сравнение - "=";
сложение - "+".
Строковые литералы должны быть в двойных или одинарных кавычках. Скобки пока не поддерживаются. Операторы будут добавляться.
johnbrown написал:
3. Какие операции с переменными (кроме присваивания) поддерживает интерпретатор? Если поддеживает, то как это реализуется на практике?
В переменную можно записать значение любого выражения. В том числе, и выражения с этой же переменной - нужно просто использовать её в качестве операнда. К примеру, в переменную "x" можно положить значение выражения "x + 1", в итоге переменная увеличится на 1.
johnbrown написал:
4. Стили оформления редактируются в xml?
Стили оформления пока не поддерживаются, но есть в планах, как и графика.
Неактивен
В переменную можно записать значение любого выражения.
Т.е. матемаматические операции полностью поддерживаются? А, скажем, rnd будет генериться?
А динамическое изменение свойств, описания комнат, объектов поддерживается?
На сколько вообще проект будет похож на ADRIFT, если, конечно, это есть в планах? Какие планы по развитию платформы, если не секрет?
Можно. Нужно просто создать команду, которая по шаблонам будет совпадать с библиотечной.
А, кстати, где можно шаблон посмотреть? Нужно в файл библиотеки лезть? Из Редактора никак? Там, вроде, только просмотр всех глаголов доступен.
Отредактировано johnbrown (07.01.2014 22:25)
Неактивен
johnbrown написал:
В переменную можно записать значение любого выражения.
Т.е. матемаматические операции полностью поддерживаются? А, скажем, rnd будет генериться?
Нет, пока не полностью. Похоже, вычитания ещё нет. ) Но это всё будет добавляться, просто пока острой необходимости не было. Добавить недолго. Рандом пока не работает, но тоже будет. Думаю, как его лучше реализовывать, чтобы было наиболее удобно пользоваться.
johnbrown написал:
А динамическое изменение свойств, описания комнат, объектов поддерживается?
Несистемные свойства можно менять динамически, но в Редакторе пока нет поддержки (только в XML). Динамические описания комнат реализованы сейчас через перехваты в локациях. А что имеется в виду под динамическим изменением объектов?
johnbrown написал:
На сколько вообще проект будет похож на ADRIFT, если, конечно, это есть в планах? Какие планы по развитию платформы, если не секрет?
Довольно сильно похож на Адрифт, насколько я могу судить... Какие-то планы видно в трекере http://www.hostedredmine.com/projects/i … ry_id=2469
Неактивен
johnbrown написал:
На сколько вообще проект будет похож на ADRIFT, если, конечно, это есть в планах?
В планах взять всё лучшее из Адрифта, переработать, адаптировать под русский и добавить своего. Если автор не передумает.
Неактивен
johnbrown написал:
А что имеется в виду под динамическим изменением объектов?
Сорри, не так написал. Динамическое изменение свойств предметов (объект - контейнер, объект может быть съеден).
В ЯРИЛе такие свойства реализованы ролями. Динамического навешивания/снятия ролей пока не планировалось. Нужно ли оно?
Неактивен
Динамического навешивания/снятия ролей пока не планировалось. Нужно ли оно?
В АДРИФТе, по-моему это реализовано. Ну, конечно, много не мало, но мне, если честно, рнд сейчас не хватает ) , ну, и справки какой-то минимальной. В АДРИФТЕ, кстати есть встроенная справка по матфункциям, очень удобно в одном клике от окна ввода. В целом, конечно, понятно,на то оно и мышинное программирование, но есть не очевидные моменты. Вообще, есть смысл сейчас писать на ЯРИЛ? Может быть такое, что новые версии не будут поддерживать старые игры?
Неактивен
johnbrown написал:
Динамического навешивания/снятия ролей пока не планировалось. Нужно ли оно?
В АДРИФТе, по-моему это реализовано. Ну, конечно, много не мало, но мне, если честно, рнд сейчас не хватает ) , ну, и справки какой-то минимальной. В АДРИФТЕ, кстати есть встроенная справка по матфункциям, очень удобно в одном клике от окна ввода. В целом, конечно, понятно,на то оно и мышинное программирование, но есть не очевидные моменты.
В ЯРИЛе пока нет матфункций) РНД - можно сделать и пораньше. Как его будет наиболее удобно использовать? Мне кажется, он чаще всего используется для каких-то случайных событий, нежели просто для генерации случайного числа. Для случайного выбора между n-ым кол-вом альтернатив, думаю, лучшим вариантом будет создание инструкции-ветвления (типы switch или case в других языках, или множественный if), с указанием случайного выбора ветви.
Или сейчас больше необходимо именно случайное число (каких-то очков, предметов и т.д.)?
johnbrown написал:
Вообще, есть смысл сейчас писать на ЯРИЛ? Может быть такое, что новые версии не будут поддерживать старые игры?
Смысл уже есть, т.к. игры уже можно писать. А платформа будет развиваться и дальше. Я постараюсь решить проблему с совместимостью, но в крайнем случае будет либо конвертация под новые версии, либо просто достаточно будет запускать игру в старой версии.
Неактивен
johnbrown написал:
ну, и справки какой-то минимальной. В АДРИФТЕ, кстати есть встроенная справка по матфункциям, очень удобно в одном клике от окна ввода. В целом, конечно, понятно,на то оно и мышинное программирование, но есть не очевидные моменты.
На справку пока не хватает времени. Альтернатива - или новые функции и исправление багов, или справка. Притом при добавлении функций нужно постоянно обновлять справку.
Вообще, есть Skype-чат по ЯРИЛу, там сидят (кроме меня) уже поднаторевшие авторы, которые завсегда помогут и подскажут. Могу добавить в чат, если интересно и есть скайп-аккаунт.
Неактивен
В ЯРИЛе пока нет матфункций) РНД -можно сделать и пораньше. Как его будет наиболее удобно использовать?Мне кажется, он чаще всего используется для каких-то случайных событий, нежели просто для генерации случайного числа. Для случайного выбора между n-ым кол-вом альтернатив, думаю, лучшим вариантом будет создание инструкции-ветвления (типы switch или case в других языках, или множественный if), с указанием случайного выбора ветви. Или сейчас больше необходимо именно случайное число (каких-то очков, предметов и т.д.)?
Rand(x,x1)
Мне бы этого хватило, т.к., как я понял, уже сейчас можно повесить перехват событий на переменную.
Неактивен
johnbrown написал:
Rand(x,x1)
Мне бы этого хватило, т.к., как я понял, уже сейчас можно повесить перехват событий на переменную.
Пока решено сделать инструкцию "Бросить кость", у которой будет задаваться диапазон и имя переменной, которой присвоить выпавшее значение.
Следить за готовностью можно в трекере http://www.hostedredmine.com/issues/256159
Неактивен
Sonic написал:
Пока решено сделать инструкцию "Бросить кость", у которой будет задаваться диапазон и имя переменной, которой присвоить выпавшее значение.
Следить за готовностью можно в трекере http://www.hostedredmine.com/issues/256159
Инструкция готова, постараюсь в ближайшее время выпустить релиз.
Неактивен
Sonic написал:
Инструкция готова, постараюсь в ближайшее время выпустить релиз.
Готово! ЯРИЛ 2.0 Хоббит, глава 3
Выглядит так:
UPD. Исправил URL скриншота.
Неактивен
У игр платформы ЯРИЛ появилась страничка в рил-архиве. Желаю ей расти, толстеть и вообще.
Отредактировано Серый Волк (29.01.2014 16:59)
Неактивен
Серый Волк написал:
У игр платформы ЯРИЛ появилась страничка в рил-архиве. Желаю ей расти, толстеть и вообще.
Спасибо! Сейчас размещу в самом посте.
Только версия платформы уже новее той, что в архиве - уже 3ий Хоббит вышел https://dl.dropboxusercontent.com/u/878 … 140117.exe
Неактивен
Nex написал:
Присоединяюсь к пожеланиям.
Скачал, запустил игрушку. Как-то уж слишком притормаживает при вводе команд. Видимо, код не оптимизирован.
Спасибо! Интересно. Код реакции уже оптимизирован, он не интерпретируется. Возможно, дело в парсере или в отображении в GUI. В логах должно отображаться время... Правда, не уверен, что там логируется парсер. Но парсер логируется прямо в GUI, если ввести команду "!отладка" (начиная с Хоббит 3).
Неактивен
ЯРИЛ победил на Золотом Хомяке 2013 в номинации "Проект года" по мнению жюри!!! http://zh.ifiction.ru/results/
Неактивен
Привет, Соник. Спасибо за генератор ,)
Скажи, а что ЯРИЛ не дружит с 7 явой?
И еще вопрос. Можно сделать, чтобы название предметов не выводилось в локации. Если установить свойство 'часть пейзажа', то предмет взять не получится .(
Неактивен
johnbrown написал:
Привет, Соник. Спасибо за генератор ,)
Скажи, а что ЯРИЛ не дружит с 7 явой?
Пока нет... вылезает ошибка при загрузке, пока не разобрался. Но инсталлятор всё равно использует свою яву, он её качает и ставит при необходимости.
johnbrown написал:
И еще вопрос. Можно сделать, чтобы название предметов не выводилось в локации. Если установить свойство 'часть пейзажа', то предмет взять не получится .(
Да, так и задумано. Раз часть пейзажа, то предмет нельзя взять - он же описан в локации.
Неактивен
johnbrown написал:
Да, так и задумано. Раз часть пейзажа, то предмет нельзя взять - он же описан в локации.
А можно сделать, чтобы предмет не выводился в описании и его можно было взять? )
А как тогда ты планируешь это потом учитывать в описании? Возьмёшь, а предмет останется в тексте?
Можно перекрыть действие описания локации в этой локации и рулить выводом описания по своему. )
Неактивен
Да, наверное, так и придется сделать.
Просто бывают ситуации, когда есть некий "неисчерпаемый" источник, например колодец или предмет условно "невидим". Было бы здорово если бы можно было установить соответствующий флаг в свойствах. Такое мое скромное пожелание )
Неактивен
условно "невидим" - это то же самое что "спрятан" ?
Для спрятанных предметов обычно есть отдельная механика.
Отредактировано ASBer (18.12.2014 09:58)
Неактивен
johnbrown написал:
Да, наверное, так и придется сделать.
Просто бывают ситуации, когда есть некий "неисчерпаемый" источник, например колодец или предмет условно "невидим". Было бы здорово если бы можно было установить соответствующий флаг в свойствах. Такое мое скромное пожелание )
Колодец нельзя взять, всё равно придётся реализовать другую логику - например, действие "зачерпнуть воды из колодца": перемещать воду из пустоты в кувшин в руках. )
А для невидимых предметов - как и сказал АСБер - обычно другая механика. Хотя, это для скрытых - для тех, что не видно сперва, но открываются при каком-то действии. А если ты имеешь в виду подразумеваемый предмет - например, руль или рычаг передач в салоне автомобиля (не будешь же всё перечислять при описании), - то да, это интересный момент. Можно, в принципе, добавить признак для не упоминаемых предметов.
(Правда и для скрытых пока нет механизма, нужно подумать.)
Неактивен
ASBer написал:
условно "невидим" - это то же самое что "спрятан" ?
Для спрятанных предметов обычно есть отдельная механика.
Просто хочется, чтобы была возможность не выводить описание предметов в локации и все, но чтобы при этом с ними можно было нормально взоимодействовать без лишних процедур и тп. О механиках пока не думал. Мне кажется не нужно слишком усложнять. Надо сделать базовые кирпичики из которых пользователь сможет сам сделать какую ему нужно механику.
Немного раздражает автосохранялка (из-за случайной перезаписи я потерял обучающий файл). Может не стоит выводить список файлов? Сохранить? Ок. И все.
И еще. Я не понял, как работают шаблоны? Ориентируюсь на игру спелеолог. Там на действии срубить есть варианты глагол и два падежа в выпадающем списке. У меня в шаблонах в литерале и в объкте в списках пустота. И еще. Вот ты создал действие. Оно, по-идее, должно всплыть в перехватах в локации и в предмете. Вот, в локации действие у меня добавляется, а в прелмете нет. В чем загвоздка?
Скачал руслана&людмила и фавна, но они зашифрованы. Можно где-то сорцы взять или еще каких-нибудь игрушек для обучения?
Неактивен
johnbrown написал:
Просто хочется, чтобы была возможность не выводить описание предметов в локации и все, но чтобы при этом с ними можно было нормально взоимодействовать без лишних процедур и тп. О механиках пока не думал. Мне кажется не нужно слишком усложнять. Надо сделать базовые кирпичики из которых пользователь сможет сам сделать какую ему нужно механику.
Добавим признак "неупоминаемый". http://www.hostedredmine.com/issues/376059
johnbrown написал:
Немного раздражает автосохранялка (из-за случайной перезаписи я потерял обучающий файл). Может не стоит выводить список файлов? Сохранить? Ок. И все.
Будет http://www.hostedredmine.com/issues/358013
johnbrown написал:
И еще. Я не понял, как работают шаблоны? Ориентируюсь на игру спелеолог. Там на действии срубить есть варианты глагол и два падежа в выпадающем списке. У меня в шаблонах в литерале и в объкте в списках пустота.
Литерал - это список синонимов. Создаёшь литерал - список пустой - нужно добавлять синонимы.
При добавлении объекта должно появляться окно выбора падежа.
johnbrown написал:
И еще. Вот ты создал действие. Оно, по-идее, должно всплыть в перехватах в локации и в предмете. Вот, в локации действие у меня добавляется, а в прелмете нет. В чем загвоздка?
В перехватах в предметах появляются только действия, имеющие в шаблонах объект. Перехват срабатывает при вызове этого действия с этим предметов в качестве параметра.
johnbrown написал:
Скачал руслана&людмила и фавна, но они зашифрованы. Можно где-то сорцы взять или еще каких-нибудь игрушек для обучения?
В новой версии ЯРИЛа будет незашифрованная версия РиЛ. Рабочий вариант (кстати, в нём много доработок и исправлений) можно взять тут: https://dl.dropboxusercontent.com/u/878 … 160125.exe
Неактивен
Выпустил все обновления как новую версию - ЯРИЛ 2014 https://forum.ifiction.ru/viewtopic.php … 367#p31367.
Неактивен
Скачал новую версию. Вынос процедур и действий в основное поле, по-моему давно напрашивался. Стало удобнее. А как ты считаешь, если сделать 4 колонки на одном экране это усложнит работу с программой или наоборот облегчит, позволив сразу видеть и объекты и действия, как например в менюшном редакторе DZQ?
Пока заметил только одну ошибку. Если установить роль предмета читаемый и в верхнее поле текста ввести одинарные ковычки 'текст' то, при попытке прочитать предмет игра вылетает с ошибкой.
Планируется добавление пользовательских ролей(групп,тэгов)?
И, еще пожелание, чтобы все изменения в редакторе сразу отображались, а то приходится выходить и заново входить. Не очень удобно, но я уже привык )
Ап. Как переместить предмет в локацию? И можно его потом будет удалить стандартными средствами? Кстати, обратил сейчас внимание: чтобы взять предмет, нужно, чтобы он где-то лежал. По-моему, это не очень удобно.
Сделал перенос предмета командой локация.предмет. Теперь в описании локации мне пишет 'здесь предмет'. При этом осмотреть его нельзя 'я не знаю слова предмет'.
Соник, можешь рассказать как работают перехваты? Как я понял, если в процедуре нет инструкций, то выполняется перехват в предмете. А если есть, то не выполняется?
Кстати, в процессе написания понял, что не хватает ивентов. Они бы прекрасно работали с процедурами, но ты, наверное, уже об думал.
Баг: процедуру можно сделать безымянной. Редактор никак не прореагирует. Переименовать не получится, только удалить.
В имени переменной почему-то нельзя использовать символ нижнего подчеркивания.
Какой синтаксис/команды используются для работы с ролями?
У действий есть исключения (или как-то так, не помню). Можно сделать, чтобы если действие написано пользователем не полностью выдавалась обработка из исключения? Меня синтаксис интересует. Вообще, к этому больше всего вопросов, особенно к проверкам условий. Хорошо, есть примеры, но они не всегда спасают, приходится самому додумывать.
В условии допустимо только одно условие?
Отредактировано johnbrown (22.12.2014 09:09)
Неактивен
Чуть позже отвечу на пост.
Возможно, быстрее и практичнее будет, если будешь задавать вопросы в скайп-чатике. Добавляй меня в друзья - michael.balanov, я тебя добавлю в чат.
Неактивен
johnbrown написал:
Скачал новую версию. Вынос процедур и действий в основное поле, по-моему давно напрашивался. Стало удобнее. А как ты считаешь, если сделать 4 колонки на одном экране это усложнит работу с программой или наоборот облегчит, позволив сразу видеть и объекты и действия, как например в менюшном редакторе DZQ?
Не знаю, боюсь, на маленьком экране может не уместиться.
Пока заметил только одну ошибку. Если установить роль предмета читаемый и в верхнее поле текста ввести одинарные ковычки 'текст' то, при попытке прочитать предмет игра вылетает с ошибкой.
Спасибо, проверю. http://www.hostedredmine.com/issues/376759
Планируется добавление пользовательских ролей(групп,тэгов)?
Да, планируется добавление пользовательских ролей. А что подразумевается под группами и тэгами?
И, еще пожелание, чтобы все изменения в редакторе сразу отображались, а то приходится выходить и заново входить. Не очень удобно, но я уже привык )
Не понял, а что не отображается? Вообще, в редакторе есть пункт меню "Запустить в Плеере" - туда попадает текущая игра (сохраняется во временный файл и загружается в Плеере).
Кстати, обратил сейчас внимание: чтобы взять предмет, нужно, чтобы он где-то лежал. По-моему, это не очень удобно.
Не совсем понял.
Сделал перенос предмета командой локация.предмет. Теперь в описании локации мне пишет 'здесь предмет'. При этом осмотреть его нельзя 'я не знаю слова предмет'.
А у него настроен словарь?
Соник, можешь рассказать как работают перехваты? Как я понял, если в процедуре нет инструкций, то выполняется перехват в предмете. А если есть, то не выполняется?
Нет, наличие инструкций в процедуре на перехват не влияет. Перехват сработает, если он есть. Если он типа "вместо" - то выполнится вместо выполнения процедуры. Иначе выполнится до или после процедуры.
Кстати, в процессе написания понял, что не хватает ивентов. Они бы прекрасно работали с процедурами, но ты, наверное, уже об думал.
Я думал про ивенты типа "изменилась переменная" или "игрок зашёл в локацию". Но это пока было на уровне мыслей. А чего именно хотелось бы?
Баг: процедуру можно сделать безымянной. Редактор никак не прореагирует. Переименовать не получится, только удалить.
Спасибо. Дописал в баг http://www.hostedredmine.com/issues/227497
В имени переменной почему-то нельзя использовать символ нижнего подчеркивания.
Исправим: http://www.hostedredmine.com/issues/358015
Какой синтаксис/команды используются для работы с ролями?
Роли при добавлении на предмет привносят ему свои свойства, а также признак с именем роли. Т.е. например, если роль "читаемый" (со свойством "текст") повесить на предмет, то у него появится свойство "текст" (к которому можно обращаться предмет.текст), а также признак предмет.читаемый (который будет равен логическому "да").
У действий есть исключения (или как-то так, не помню). Можно сделать, чтобы если действие написано пользователем не полностью выдавалась обработка из исключения? Меня синтаксис интересует. Вообще, к этому больше всего вопросов, особенно к проверкам условий. Хорошо, есть примеры, но они не всегда спасают, приходится самому додумывать.
У действий есть ограничения. Они проверяются по очереди при попытке выполнить действие. Если условие какого-то из ограничений будет истинным (логическое "да"), то выполняются инструкции ограничения, а действие и остальные ограничения уже не выполняются. Пример - в Руслане и Людмиле действие "трубить".
В условии допустимо только одно условие?
Какое условие ты имеешь в виду? Вообще, выражения поддерживают логические операторы: и, или, не.
Неактивен
Да, планируется добавление пользовательских ролей. А что подразумевается под группами и тэгами?
Я имел в виду одно и тоже - возможность навесить на предметы некий признак, тэг. Чтобы объединить схожие группы предметов, чтобы не делать лишней работы с перечислением предметов в условиях. Там даже механики никакой не нужно, просто обычный тэг.
И, еще пожелание, чтобы все изменения в редакторе сразу отображались, а то приходится выходить и заново входить. Не очень удобно, но я уже привык )
Не понял, а что не отображается? Вообще, в редакторе есть пункт меню "Запустить в Плеере" - туда попадает текущая игра (сохраняется во временный файл и загружается в Плеере).
Посмотри процедуры или действия. Внутри них изменения становятся видны визуально только если закрыть и открыть их соответственно, хотя по-факту, да, сразу все изменяется.
Кстати, обратил сейчас внимание: чтобы взять предмет, нужно, чтобы он где-то лежал. По-моему, это не очень удобно.
Не совсем понял.
Я проверял. Чтобы переместить предмет, к примеру, к себе в инвентарь, этот предмет должен быть к чему-то приписан. Т.е., изначально он может висеть в воздухе, редактор это позволяет, но тогда передачи не произойдет. Мне кажется, это не совсем правильно.
Сделал перенос предмета командой локация.предмет. Теперь в описании локации мне пишет 'здесь предмет'. При этом осмотреть его нельзя 'я не знаю слова предмет'.
А у него настроен словарь?
Конечно, есть словарь с синонимами.
Я думал про ивенты типа "изменилась переменная" или "игрок зашёл в локацию". Но это пока было на уровне мыслей. А чего именно хотелось бы?
А все, что сейчас позволяет процедура, все забабахать в ивенты. Нужны процедуры, срабатывающие автоматически, при наступлении условия.
Какое условие ты имеешь в виду? Вообще, выражения поддерживают логические операторы: и, или, не.
Да, это я имел в виду.
У действий есть ограничения. Они проверяются по очереди при попытке выполнить действие. Если условие какого-то из ограничений будет истинным (логическое "да"), то выполняются инструкции ограничения, а действие и остальные ограничения уже не выполняются. Пример - в Руслане и Людмиле действие "трубить".
Вот, скажем есть некий шаблон: глагол + предмет.ип. Я могу сделать такое ограничение, если пользователь не указал предмет (просто написал глагол)?
если предмет.ип = '' то "Что я должен' + глагол + '?'
ЗЫ можно создать отдельный топик по чисто-техническим вопросам реализации языка.
Отредактировано johnbrown (22.12.2014 17:45)
Неактивен
Vladimir написал:
После переустановки винды с Vista на 7 версию ваша ЯРИЛ успешно инсталлируется. Хотелось бы иметь к платформе инструкцию для разработки игр.
Начата работа над учебником и справочником.
Неактивен
Замеченные особенности:
1) Кто-то писал о необходимости ставить "кучу мусора" или "всё эту "всю эту джава-помойку" или даже о какой-то ошибке. У меня всё запустилось нормально, НО вот хочу отметить известные мне замечания.
2) Что за ужас с представлением себя(то есть, гг)? В большинстве парсерок, что я видел, даже на Адрифте, возможность осмотреть себя- вполне естественная команда, как минимум, работающая на атмосферу, а порой и дающая важные намёки. Как игрок, я ожидаю, что и остальные известные игре команды будут адекватно восприняты по отношению к себе. Вот с этим надо что-то делать. Не надо так мучать авторов.
3) И, да- про известные игре команды. Могу ошибаться, но, как я понял, известные платформе команды автору "не вырубить топором". А по мере добавления команд, новые команды будут использоваться и в старых играх. Так, комсомолец в игре "комсомолец" запросто и без ошибок произносит молитву "Отче Наш". То есть, в перспективе, автор будет иметь огромный список команд, большинство из которых ему нафик не нужны, НО с каждой из которых надо что-то делать, дабы избежать проблем // напр в RTADS-игре "Волк, коза и капуста", когда я запускал её в последний раз, можно было отдать капусту козе , что заводило всю игру в тупик, потому что коза ни в какую не отдавала капусту обратно; так же был момент в какой-то игре, где нельзя было шуметь, но можно было без проблем кричать и орать, потому что автор ничего не сделал с этими командами. // === я считаю, что у авторов должна быть возможность просматривать список известных игре команд И управлять этим списком: исключать или возвращать команды в список. А так же модифицировать реакцию на них. Помимо прочего, это сделает помощь, выводимую командой "помощь", более адекватной.
4) Мне не известно, вина ли авторов Ганметалла или авторов платформы в том, что при попытке говорить с некоторыми осматриваемыми персонажами, выдаётся сообщение "его здесь нет". Интересно было бы увидеть разъяснения.
5) Некоторые платформы поддерживают команду "выходы", которая позволяет игроку включать/выключать автоматическое отображение списка выходов после описания локаций. Думаю, и на ЯРИЛе такая команда не будет лишней.
6) Вывод списка всех объектов, с которыми можно взаимодействовать, после описания локаций- довольно спорная особенность платформы. Для хорошей парсерки это означает повторение [почти] всех существительных после текста описания. И, да- вроде бы кто-то уговорил Sonic-a сделать возможность скрывать некоторые объекты, чтобы они не показывались в этом списке. Для меня всё это выглядит очень и очень странно... хотя, с другой стороны: если ЯРИЛ получится так прост, как это задумывается, то неизбежно большая часть игр на нём будет выполнена в стиле "недопарсерки", в которых списки объектов будут отнюдь не лишними. Возможно, хорошим выходом будет сделать команду для включения/отключения отображения списка объектов игроком.
7) Дальнейшие замечания смогу сделать после того, как запущу редактор, для чего сначала сяду вспоминать старый путь к ЯРИЛу, затем помещу его туда и деинсталлирую, затем инсталлирую туда, где он сейчас. upd: да, я не люблю, когда каждая мелкая прога инсталлируется, а не запускается просто так.
Отредактировано qwerty (27.01.2017 18:33)
Неактивен
qwerty написал:
Замеченные особенности:
4) Мне не известно, вина ли авторов Ганметалла или авторов платформы в том, что при попытке говорить с некоторыми осматриваемыми персонажами, выдаётся сообщение "его здесь нет". Интересно было бы увидеть разъяснения.
Не могли бы вы описать, в каком случае это происходит? Я оперативно перепроверю.
Можно просто скопировать клавишами CTRL+A и CTRL+C весь экран во время игры, так будет ещё лучше.
Неактивен
Сейчас идет работа над интеграцией rinform в специальный проигрыватель для незрячих. Есть ли возможность сделать какой-то модуль (в виде dll, к примеру) с API для подключения к такому проигрывателю? Платформа - только Windows, желательно без привязки к JAVA-машине?
Отредактировано Антон Ласточкин (30.01.2017 19:12)
Неактивен
qwerty написал:
1) Кто-то писал о необходимости ставить "кучу мусора" или "всё эту "всю эту джава-помойку" или даже о какой-то ошибке. У меня всё запустилось нормально, НО вот хочу отметить известные мне замечания.
Не запускается у тех, у кого не стоит Джава. Планирую переделать - или добавить в инсталлер установку Джавы, или поставлять ЯРИЛ вместе с Джавой.
qwerty написал:
2) Что за ужас с представлением себя(то есть, гг)? В большинстве парсерок, что я видел, даже на Адрифте, возможность осмотреть себя- вполне естественная команда, как минимум, работающая на атмосферу, а порой и дающая важные намёки. Как игрок, я ожидаю, что и остальные известные игре команды будут адекватно восприняты по отношению к себе. Вот с этим надо что-то делать. Не надо так мучать авторов.
Да, ценное замечание. Есть идеи, какая механика должна быть у "себя"? Предполагаю, что в игре должен присутствовать игрок как сущность, соответственно, ему можно будет задать словарь, к нему можно будет обратиться (т.к. он будет в области досягаемости), да и инвентарь логично перенести в него.
qwerty написал:
3) И, да- про известные игре команды. Могу ошибаться, но, как я понял, известные платформе команды автору "не вырубить топором". А по мере добавления команд, новые команды будут использоваться и в старых играх. Так, комсомолец в игре "комсомолец" запросто и без ошибок произносит молитву "Отче Наш". То есть, в перспективе, автор будет иметь огромный список команд, большинство из которых ему нафик не нужны, НО с каждой из которых надо что-то делать, дабы избежать проблем // напр в RTADS-игре "Волк, коза и капуста", когда я запускал её в последний раз, можно было отдать капусту козе , что заводило всю игру в тупик, потому что коза ни в какую не отдавала капусту обратно; так же был момент в какой-то игре, где нельзя было шуметь, но можно было без проблем кричать и орать, потому что автор ничего не сделал с этими командами. // === я считаю, что у авторов должна быть возможность просматривать список известных игре команд И управлять этим списком: исключать или возвращать команды в список. А так же модифицировать реакцию на них. Помимо прочего, это сделает помощь, выводимую командой "помощь", более адекватной.
У платформы практически нет своих команд. По крайней мере, игровых точно нет, только несколько системных. Остальные расположены в библиотеке "Глаголы", которую можно не подключать, а сделать свои команды. В случае подключения библиотеки, если автор напишет свою команду, то она сработает первой. Про просмотр импортированных из библиотек команд - реализация была, но не помню точно, виден ли этот интерфейс сейчас. Про отключение импортированных команд хорошая идея, запишу фичу. Про перекрытие реакции - есть механизм перекрытия реакции команды на отдельном предмете / в отдельной локации, про общую реакцию надо подумать.
qwerty написал:
4) Мне не известно, вина ли авторов Ганметалла или авторов платформы в том, что при попытке говорить с некоторыми осматриваемыми персонажами, выдаётся сообщение "его здесь нет". Интересно было бы увидеть разъяснения.
Зависит от реализации игры - предметом ли сделан персонаж, доступен ли он в этот момент - и это если работает стандартный механизм шаблона глагол + предмет
. Если же прописан литеральный шаблон (константная фраза), то тут зависит от прописанной реакции в игре. Вариантов много.
qwerty написал:
5) Некоторые платформы поддерживают команду "выходы", которая позволяет игроку включать/выключать автоматическое отображение списка выходов после описания локаций. Думаю, и на ЯРИЛе такая команда не будет лишней.
Да, дельное замечание, спасибо.
qwerty написал:
6) Вывод списка всех объектов, с которыми можно взаимодействовать, после описания локаций- довольно спорная особенность платформы. Для хорошей парсерки это означает повторение [почти] всех существительных после текста описания. И, да- вроде бы кто-то уговорил Sonic-a сделать возможность скрывать некоторые объекты, чтобы они не показывались в этом списке. Для меня всё это выглядит очень и очень странно... хотя, с другой стороны: если ЯРИЛ получится так прост, как это задумывается, то неизбежно большая часть игр на нём будет выполнена в стиле "недопарсерки", в которых списки объектов будут отнюдь не лишними. Возможно, хорошим выходом будет сделать команду для включения/отключения отображения списка объектов игроком.
Это же классика - вывод простых переносимых предметов после описания. Например, в TADS, в Inform. В ЯРИЛ сделано так: все добавляемые в локацию предметы перечисляются в этом выводе после описания локации. Если же предмет - декорация (упомянут в описании локации) или невидим, то на него можно повесить специальный признак, тогда он не будет перечисляться. Я ещё думаю над декорациями как отдельной сущностью, но пока этот вопрос ещё не проработан.
qwerty написал:
7) Дальнейшие замечания смогу сделать после того, как запущу редактор, для чего сначала сяду вспоминать старый путь к ЯРИЛу, затем помещу его туда и деинсталлирую, затем инсталлирую туда, где он сейчас. upd: да, я не люблю, когда каждая мелкая прога инсталлируется, а не запускается просто так.
Зачем помещать по старому пути? Там должен был остаться деинсталлятор.
В пользу инсталляции: разные ярлыки на запуск Плеера, Редактора, Тестера, в будущем - ассоциация файлов. Но я думаю о портабельной версии.
UPD. Добавил ссылки на заведённые задачи.
Неактивен
Антон Ласточкин написал:
Сейчас идет работа над интеграцией rinform в специальный проигрыватель для незрячих. Есть ли возможность сделать какой-то модуль (в виде dll, к примеру) с API для подключения к такому проигрывателю? Платформа - только Windows, желательно без привязки к JAVA-машине?
Сложный вопрос. Есть всякие инструменты по переводу джава-кода в exe (Excelsior JET), в .NET (IKVM.NET), но это надо тщательно тестировать и смотреть, выставляют ли такие сборки API.
Вообще, у ЯРИЛ есть консольный проигрыватель, и он работает как обычная консоль в Windows. Думаю, с неё программы могут читать?
Неактивен
Mikhail Rogozhin написал:
qwerty написал:
Замеченные особенности:
4) Мне не известно, вина ли авторов Ганметалла или авторов платформы в том, что при попытке говорить с некоторыми осматриваемыми персонажами, выдаётся сообщение "его здесь нет". Интересно было бы увидеть разъяснения.Не могли бы вы описать, в каком случае это происходит? Я оперативно перепроверю.
Можно просто скопировать клавишами CTRL+A и CTRL+C весь экран во время игры, так будет ещё лучше.
Ну, например, запустив игру, введите такие команды:
спойлер…
- всё. Теперь вы находитесь в ситуации, где Гай видим, его можно осмотреть, но поговорить с ним нельзя. Вообще же подобных ошибок в игре- пруд пруди.
1) обойдите все доступные комнаты и найдите всех собеседников.
2) с помощью генератора случайных чисел выберите одного из них и поговорите.
3) goto 1
- так можно найти многое, НО последовательное исследование всё же лучше И ещё, может быть, факт посещения комнаты может повлиять на последствия. Для начала я порекомендовал такой рандомный метод, поскольку предположил, что местонахождение некоторых персонажей иногда оказывается не тем, что было задумано. Но настоящее тщательный поиск ошибок предполагает последовательное исследование.
Тут одно из двух: либо вы делаете что-то не так, либо же ЯРИЛ как-то не так обрабатывает ваши верные команды.
И, собственно, тщательное исследование и НЕ НУЖНО. А что нужно, так это выяснить у Sonica, как правильно делается то, что вы хотите сделать. И если сделаете всё верно, то глюки будут уже его проблемой ))
Неактивен
Sonic написал:
Антон Ласточкин написал:
Сейчас идет работа над интеграцией rinform в специальный проигрыватель для незрячих. Есть ли возможность сделать какой-то модуль (в виде dll, к примеру) с API для подключения к такому проигрывателю? Платформа - только Windows, желательно без привязки к JAVA-машине?
Сложный вопрос. Есть всякие инструменты по переводу джава-кода в exe (Excelsior JET), в .NET (IKVM.NET), но это надо тщательно тестировать и смотреть, выставляют ли такие сборки API.
Вообще, у ЯРИЛ есть консольный проигрыватель, и он работает как обычная консоль в Windows. Думаю, с неё программы могут читать?
Спасибо за наводки. Дело в том, что консоль скринридеры могут читать, но вот не очень удобно. В проигрывателе tadswrapper уже сделана отправка текста прямо на API большинства скринридеров, сохранение и просмотр истории команд, стандартное меню для начала новой игры, сохранения, загрузки и т.п. Прикрутить движок ЯРИЛа будет не сложно, мне кажется.
Отредактировано Антон Ласточкин (30.01.2017 22:56)
Неактивен
Антон Ласточкин написал:
Спасибо за наводки. Дело в том, что консоль скринридеры могут читать, но вот не очень удобно. В проигрывателе tadswrapper уже сделана отправка текста прямо на API большинства скринридеров, сохранение и просмотр истории команд, стандартное меню для начала новой игры, сохранения, загрузки и т.п. Прикрутить движок ЯРИЛа будет не сложно, мне кажется.
Вообще, движок ЯРИЛа написан так, что к нему можно писать любой плеер. Но - на Джаве. Можно попробовать написать плеер с нативным API. Покопать надо.
Неактивен
Sonic написал:
Можно попробовать написать плеер с нативным API. Покопать надо.
Нашёл, как можно вызывать Java-методы из C++. tadswrapper на C++? Сможет так дёргать?
Неактивен
Sonic написал:
Sonic написал:
Можно попробовать написать плеер с нативным API. Покопать надо.
Нашёл, как можно вызывать Java-методы из C++. tadswrapper на C++? Сможет так дёргать?
Да, на С++. Дёргать сможет, только надо бы подсказать что и где В принципе, можно с собой небольшую JAVA машину таскать, главное чтобы не надо было инсталляции - просто распаковал архив и движок запустился.
Неактивен
Антон Ласточкин написал:
Да, на С++. Дёргать сможет, только надо бы подсказать что и где В принципе, можно с собой небольшую JAVA машину таскать, главное чтобы не надо было инсталляции - просто распаковал архив и движок запустился.
Думаю, это возможно. Осталось только позаниматься этим. )
Неактивен
qwerty написал:
Mikhail Rogozhin написал:
qwerty написал:
Замеченные особенности:
4) Мне не известно, вина ли авторов Ганметалла или авторов платформы в том, что при попытке говорить с некоторыми осматриваемыми персонажами, выдаётся сообщение "его здесь нет". Интересно было бы увидеть разъяснения.Не могли бы вы описать, в каком случае это происходит? Я оперативно перепроверю.
Можно просто скопировать клавишами CTRL+A и CTRL+C весь экран во время игры, так будет ещё лучше.Ну, например, запустив игру, введите такие команды:
спойлер…
- всё. Теперь вы находитесь в ситуации, где Гай видим, его можно осмотреть, но поговорить с ним нельзя. Вообще же подобных ошибок в игре- пруд пруди.
1) обойдите все доступные комнаты и найдите всех собеседников.
2) с помощью генератора случайных чисел выберите одного из них и поговорите.
3) goto 1
- так можно найти многое, НО последовательное исследование всё же лучше И ещё, может быть, факт посещения комнаты может повлиять на последствия. Для начала я порекомендовал такой рандомный метод, поскольку предположил, что местонахождение некоторых персонажей иногда оказывается не тем, что было задумано. Но настоящее тщательный поиск ошибок предполагает последовательное исследование.
Тут одно из двух: либо вы делаете что-то не так, либо же ЯРИЛ как-то не так обрабатывает ваши верные команды.
И, собственно, тщательное исследование и НЕ НУЖНО. А что нужно, так это выяснить у Sonica, как правильно делается то, что вы хотите сделать. И если сделаете всё верно, то глюки будут уже его проблемой ))
Нашёл баг. Это наш косяк, выводилось неверное описание. Исправил и перезалил.
Отредактировано Mikhail Rogozhin (31.01.2017 21:28)
Неактивен