ТОМ - платформа для текстовых игр

Объявление

Платформа ТОМ предназначена для создания текстовых игр на русском языке и имеет развитый парсер, позволяющий взаимодействовать с играми с помощью команд на близком к естественному языке. В данный момент активно разрабатывается версия ТОМ 2.
Последнюю версию платформы можно скачать здесь.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Альфа

Сообщений 91 страница 120 из 136

91

версия 2.a.4.3 альфа.

Изменение формата описания функций, необязательные аргументы функций;
Исправление ошибок в библиотеке;
Дальнейшее развитие веб-интерфейса;
В демо-игру добавлено несколько картинок:

http://sh.uploads.ru/t/qFmn6.png

92

В следующем релизе будет много мелких усовершенствований, поэтому буду сразу тут записывать, чтобы не забылось:

---------------------------------------------------------
Случайный выбор
синтаксис выражения: А | B [| C [|...]]  - где А, B, C - выражения или константы на языке TOML.
Выполнено будет только одно случайное выражение из перечисленных.
Пример:
var A = (5|105|100500) //переменной А будет случайно присвоено одно из чисел - 5, 105, или 100500.
Изначально делалось для увеличения разнообразия выводимых сообщений:
%ты {"ударил"|"огрел"|"напал на"} гоблина!

---------------------------------------------------------
Операция подобия
синтаксис выражения: А like B; А подобно Б  - где А любое объектное значение, B - класс.
Операция работает аналогично is - относит объект А к классу Б с наследованием всех свойств и методов, за одним исключением - классовые имена А не действуют на объект Б.
Пример:
class орк { like человек }
object Рубака{ is орк }

> осмотри Рубаку
Рубака выглядит как обычно.
> осмотри орка
Орк выглядит как обычно.
> осмотри человека
Здесь нет человека.

---------------------------------------------------------
Отрицание в игровой команде
Возможность вводить игровые команды с частицей "не".
Пропала во время переделки интерпретатора. Восстановлено.

---------------------------------------------------------
Системные сообщения
Переделан ряд системных сообщений на некорректный ввод и на не полный разбор команды.
Диалог с парсером стал выглядеть более осмысленным.

---------------------------------------------------------
Операции И и ИЛИ для объединения значений в списки
Возможность объединять значения в списки пропала после рефакторинга. Но и раньше это работало не очень корректно, т.к. для булевой логики и для объединения использовались одни и те же операторы, а приоритет этих операций различен и приходилось применять скобки () в выражениях.
Будут операции:
and/и, or/или - для создания списков.
Пример: Вася и Петя.
&&, || - для булевой логики.
Пример: true || false.

---------------------------------------------------------
Операция goto разбита на 2 части: check и goto
До этого проверка возможности перемещения проводилось внутри операции goto.
Теперь проверка вынесена в отдельную операцию check, а goto выполняет безусловный переход в локацию.

93

версия 2.a.4.4 альфа.
Подробности о изменениях смотрите постом выше.

94

В следующем релизе будет полностью восстановлена функциональность работы с NPC из 1-го ТОМа.
Там была весьма интересная концепция речевого акта и автоматического вычисления лица в различных фазах выполнения команды.
Вроде бы всё это получается переложить на 2й ТОМ без потерь.

-------------------------------------------------
Доработка веб-интерфейса:
- авто-список игр по команде "игры", "games", "список игр";
- команда "заново" / "restart";
- перезагрузка html, css файлов при старте игры (у каждой игры может быть своё оформление);
- подстановка команд из 10 последних введенных.

95

версия 2.a.4.5 альфа.

В архив в дополнение к демо-игре добавлены 2 обучающих урока.
Изменилась структура каталогов, добавлен стартовый список игр.

Доработка веб-интерфейса:
- авто-список игр по команде "игры", "games", "список игр";
- команда "заново" / "restart";
- перезагрузка html, css файлов при старте игры (у каждой игры может быть своё оформление и свой интерфейс);
- подстановка команд из 10 последних введенных.

Поддержка NPC не полная и пока еще очень сырая.
К сожалению, выявилась еще одна архитектурная проблема, но не настолько большая, чтобы затевать  еще один рефакторинг.
Поэтому в демо-игру добавлять NPC я не стал. Во 2м уроке есть собака, которой можно покомандовать - заставить её читать книгу, или еще что-нибудь.

Для полноценной поддержи NPC нужно дописать все действия стандартной библиотеки. Каждое действие может выполняться двояко, в зависимости от того, выполняет его NPC или ГГ. Но это имеет смысл делать только после исправления выявленной проблемы.

96

Как начать игру? У меня вот что:
http://sh.uploads.ru/oH7h3.png

И я так понял, "консольного" варианта больше не будет? Только веб-интерфейс? В таком случае, как посоветуешь мне сделать запуск проекта из редактора? Раньше я просто запускал tom2.exe и передавал в параметре путь к файлу *.tom. Сейчас же запускается какой-то мини веб-сервер и как передать ему команду запуска игры, непонятно.

97

Alexandr написал(а):

Как начать игру? У меня вот что:

Варианты:
run <filename>
Если игра лежит рядом с движком и имеет расширение .tom (как в моём архиве) она отобразится в списке игр,
Команда "заново" имеет смысл только если игра уже запущена.

Alexandr написал(а):

И я так понял, "консольного" варианта больше не будет? Только веб-интерфейс?

Будет простой вариант с windows-консолью.

Alexandr написал(а):

В таком случае, как посоветуешь мне сделать запуск проекта из редактора? Раньше я просто запускал tom2.exe и передавал в параметре путь к файлу *.tom.

Так же как и было - webtom.exe с параметром. Должно работать, если случайно не поломалось.
update: проверил, работает.

98

С текущей версии и далее структура каталогов платформы будет выглядеть примерно так:

\tom2
- \bin
- \игра 1
- \игра 2
- \игра ...
- \игра N
run.cmd

т.е. под каждую игру будет свой отдельный каталог, со своими файлами настроек, картинками и может быть даже со своими плагинами.

99

ASBer написал(а):

Так же как и было - webtom.exe с параметром.

Это запускает стартовое окно, в котором нужно нажать "Начаить игру", чтобы можно было начать проверку. Это лишнее действие - не совсем удобно. Можно добавить какой-нить параметр, чтобы игра сразу запускалась? Во время проверки/отладки игры её придётся часто запускать.

100

Код:
  object ты
  {
    // Parents
    это человек
    // атрибуты
    блестящее
    property описание = ""
    property немой = нет, "говорящий"
  }
  
  object дверь
  {
    // Parents
    это дверь
    // атрибуты
    открытое
  }

Результат проверки:

> дверь открыта?
Да.
> я блестящий?
Ок.
> я высокий?
Ок.
> я немой?
Ок.

Что означает это загадочное "Ок.", и как достучаться до атрибутов ГГ?

101

Alexandr написал(а):

Можно добавить какой-нить параметр, чтобы игра сразу запускалась?

Да, можно.
Второй параметр будет указывать на способ игры -  в браузере или в окне.

102

Alexandr написал(а):

Что означает это загадочное "Ок.", и как достучаться до атрибутов ГГ?

Не знаю... надо потестить, видимо что-то поломалось.

"Ок." - успешное выполнение функции, только вот функция ничего не вывела.
Кстати, может заменить "Ок" на что-нибудь русское? "Хорошо" например, или "ладно" =)

103

Код:
  -- _проверка входа в башню --
  if(дверь:башни.запертое) fail, "дверь в башню закрыта"
  ok

  -- _проверка залаза на башню --
  if(_движение==лезть || _движение==подниматься) return ok
  fail, "По стене башни невозможно {_движение*#Ив}!"

И давно имена секций могут содержать пробелы? Или это какая-то новая фишка? Или всё после первого пробела - комментарий? Если да, то можно задавать несколько секций с одним именем?

104

Alexandr написал(а):

И давно имена секций могут содержать пробелы?

Довольно давно, около года наверное...
Но это относится только к секциям, использующимся в перемещениях между локациями.

-- _проверка входа в башню --

_проверка - основное имя секции;
в башню - расширение, специальный падеж от локации, в которую/из которой происходит перемещение;
Весь остальной текст игнорируется.

Если секция с нужным расширением не найдена, выполняется секция с нужным именем без расширения, которая должна стоять в конце. Поиск однопроходный.

Alexandr написал(а):

можно задавать несколько секций с одним именем?

Это всегда можно было, только работать будет одна первая секция.

105

Т.е. _проверка - это тоже имя стандартной секции, как parse или check в действиях? А зачем тогда знак подчёркивания перед именем? Меня это сбивает с толку и я думаю, что это пользовательская секция.
Получается _вход, _сцена, _выход и _фон - тоже стандартные секции? И все со знаком подчёркивания?

106

Да, все верно.
Дело в том что "вход", "сцена", "выход" и "фон" - это нормальные слова русского языка и все они есть в словаре.
Если назвать секцию без подчеркивания, игрок сможет ввести команду, которая приведет к выполнению секции, ведь секция - это вычисляемое свойство.
А это тут совсем не нужно.

107

> дверь открыта?
Да.
> я блестящий?
Ок.
> я высокий?
Ок.
> я немой?
Ок.

Ошибка была частично в платформе, частично в библиотеке. Будет исправлена в следующем релизе.
Возникает вопрос, насколько вообще реально оттестить библиотеку и платформу, учитывая их немалый объём.
Пока не вижу другого способа, кроме как писать игры. Разные и много =)

108

версия 2.a.4.6 альфа

Изменения в интерфейсе
- доработан список игр, названия игр берутся из файла игры и распределяются по категориям;
- добавлен автоматический 3-х секундный запуск игры;
- добавлен 2й параметр для автоматического запуска игры: "w" - запуск в окне, "b" - запуск в браузере.

Изменения в движке
- исправлены ошибки, связанные с неоднозначностью идентификаторов. Ошибки проявлялись в операциях, когда имена объектов совпадали с именами классов.

Изменения в библиотеке
- исправлены некоторые ошибки.

Текущие работы по движку
- начата, но не закончена работа по новому распределению контекстов и объектов this. Работа очень нужная и объемная. Без её завершения невозможна корректная работа вложенных вызовов функций и методов объектов, и как следствие - невозможно дальнейшее наращивание библиотеки.
Работаем =)

109

версия 2.a.4.7 альфа (баг-фикс)

Исправленные ошибки
- восстановлена работа внешних функций.
  Как следствие, все внешние функции и системные команды теперь работают исключительно из кода или режима "вне игры".
  В режиме "в игре" функции могут быть вызваны через слэш -  "/print test".
  Переключение в режим "вне игры" теперь работает тоже только через слэш -  "/вне игры".

Изменения в интерфейсе
- запуск игр и просмотр каталогов из адресной строки браузера.

Текущие работы по движку
- всё еще начата, но не закончена работа по распределению контекстов и объектов this. Работа очень нужная и объемная. Без её завершения невозможна корректная работа вложенных вызовов функций и методов объектов, и как следствие - невозможно дальнейшее наращивание библиотеки.
Работаем =)

110

Анонс
Состояние платформы пришло к более-менее стабильному варианту, поэтому скоро будет очередной релиз.
Изменений много, не все они доведены до конца, но это вполне нормально для развивающейся системы. Специально вылизывать все ошибки к релизу не буду, их много.

Основные изменения:
- синтаксис (в библиотеке можно встретить устаревший код);
- принципы работы ядра, возможность параллельно запускать неограниченное количество игр на одном движке;
- усовершенствована система отлова ошибок;
- изменён интерфейс между движком и фронтендом;
- добавлен веб-редактор.

111

Впервые за всю историю платформы к релизу будет приложена документация.
Пусть довольно грязная и не полностью детализированная, но структурированная и всеохватывающая.

За это отдельное спасибо Вадиму Балашову как соавтору и неутомимому "понукателю" =)

112

Интересный получилось тег сделать - <letter>, который превращает следующую за ним букву в картинку:
http://s6.uploads.ru/xb0dE.png

113

ASBer написал(а):

Интересный получилось тег сделать - <letter>, который превращает следующую за ним букву в картинку:

Мммм... буквица...
Когда же уже релиз альфы?
И вообще, есть какой-нибудь план развития проекта? Буквицы, веб, всё это, конечно, хорошо. Но лично моё мнение, что проект должен двигаться в сторону двух вещей -- 1. поддержка иных операционных систем, кроме windows. а для этого он должен быть компилируем скажем gcc. и 2. создание полноценной игры на платформе. а для этого нужна документация.

114

zerbino написал(а):

И вообще, есть какой-нибудь план развития проекта?

Нет, плана нет. Есть представление о направлении развития.
Работа по плану со сроками к сожалению вгоняет меня в депрессию, что ведёт к срыву и откладыванию проекта на дальнюю полку. Это мы уже проходили.

zerbino написал(а):

поддержка иных операционных систем, кроме windows. а для этого он должен быть компилируем скажем gcc.

Реально быстрее будет развернуть веб-сервер и играть через интернет, чем адаптировать код к gcc.
Еще есть надежда на wine. Если было бы где поэкспериментировать, думаю ТОМ заработает с минимумом переделок.

zerbino написал(а):

2. создание полноценной игры на платформе. а для этого нужна документация.

Тут возразить нечего.

zerbino написал(а):

Когда же уже релиз альфы?

Осталось "причесать" документацию, дорисовать буквицы, отладить демо-игру до состояния проходимости и тогда уже сразу релиз...

115

версия 2.a.4.8 альфа

Изменений много, всё основное описано выше.
Можно было бы и дальше подчищать, но тогда бы и релиза не было =)

Редактор пока работает только как навигатор по коду без сохранения изменений.

116

ASBer написал(а):

версия 2.a.4.8 альфа


и тебя с первым апреля. в связи с тем, что каталог Doc а ссылки в html -- doc, в линуксе имеем косяки
вот почему я за прикладывание православного pdf файла с документацией!

117

zerbino написал(а):

каталог Doc а ссылки в html -- doc

Спасибо, поправлю =)

118

Следующий релиз будет посвящен глобальной переделке словаря.
- плагин dic.plg.dll будет убран, и вся словарная функциональность переместится в tom.dll, что облегчит дальнейшую более тесную интеграцию словаря с движком;
- вероятно, будет изменен поиск слов в словаре, и следовательно вся структура словаря;
- для всех слов будут добавлены классы частей речи - существительное, глагол, прилагательное и т.д.;
- к словам будет добавлен обработчик события для не найденной формы, позволяющий собрать и вернуть форму программно.

Возможность подключить плагин своего собственного словаря на этом прекращается.
Вот такие примерно планы.

119

ASBer написал(а):

возможность параллельно запускать неограниченное количество игр на одном движке

Запустил webtom.exe, в настройках - игра в браузере. В первом браузере запустил демку про башню. Запустил второй браузер (другой, так-что куки должны быть разные), зашёл там в урок 1. В первом браузере пошёл текст этого урока:
http://s4.uploads.ru/t/h15gZ.png

Как настроить параллельный запуск нескольких сессий? Или это пока не реализовано?
Хотел запустить на домашнем компе сервер, чтоб извне можно было зайти. webtom.exe для этого не годится? Нужно делать какую-то программу, которая будет использовать чисто tom.dll?

Как на счёт безопасности? После поверхностной проверки сложилось впечатление, что webtom.exe отдаёт файлы из папки уровнем выше себя (включая подкаталоги) с определёнными расширениями (html, css, ...). Получить доступ к файлам выше каталога, или скачать какой-нибудь tom.dll через браузер у меня не получилось. Т.е. безопасность уже на достаточном уровне для запуска сервера?

Отредактировано Alexandr (2016-04-14 10:00:18)

120

Alexandr написал(а):

Запустил webtom.exe, в настройках - игра в браузере. В первом браузере запустил демку про башню. Запустил второй браузер (другой, так-что куки должны быть разные), зашёл там в урок 1. В первом браузере пошёл текст этого урока:
Как настроить параллельный запуск нескольких сессий? Или это пока не реализовано?

По сессиям разделено управление, раздельный вывод текста пока еще не доделал, там немного сложнее, поэтому текст забирает себе та сессия, которая успеет первой.
Если свернуть окно неактивной сессии или перейти на другую закладку, весь вывод пойдет в открытое окно.

Alexandr написал(а):

Хотел запустить на домашнем компе сервер, чтоб извне можно было зайти. webtom.exe для этого не годится? Нужно делать какую-то программу, которая будет использовать чисто tom.dll?

Компьютер должен иметь фиксированный IP и 80 порт должен быть доступен извне и webtom.exe должен быть запущен на проигрывание игры. По-моему этого должно быть достаточно.
Адрес в браузере должен быть: http://MyIP/TOM2/
Сам правда не пробовал, но теоретически должно всё работать.

Alexandr написал(а):

Как на счёт безопасности? После поверхностной проверки сложилось впечатление, что webtom.exe отдаёт файлы из папки уровнем выше себя (включая подкаталоги) с определёнными расширениями (html, css, ...).

Да, всё так и есть.

Alexandr написал(а):

Получить доступ к файлам выше каталога, или скачать какой-нибудь tom.dll через браузер у меня не получилось. Т.е. безопасность уже на достаточном уровне для запуска сервера?

Я не специалист в области сетевой безопасности, вполне возможно что webtom можно взломать извне каким-нибудь простым способом. Если владельцу сервера это не страшно, то можно запустить webtom как самостоятельный web-сервер. Но в дальнейшем я хотел бы на его основе сделать модуль к какому-нибудь апачу, чтобы было всё по-взрослому.