ТОМ 0.9 бета

Материал из IFВики
Перейти к навигации Перейти к поиску

TOM logo.GIF

Общая информация

Парсерная русскоязычная ИЛ-платформа.

Расшифровка названия: ТОМ - Текстовая Основа Миростроения.

Текущая версия: 0.9.4.9 бета.

Игры на платформе ТОМ.

Автор: ASBer

Официальный форум платформы.

Есть набор простых примеров по программированию.

Для углубленного изучения посетите раздел документации.

Если у Вас есть вопросы по платформе - посмотрите FAQ.


Язык программирования

ТОМ имеет скриптовый язык программирования высокого уровня, по синтаксису близкий к С++, а по идеологии напоминающий Ruby.

Язык поддерживает объектно-ориентированное программирование с линейным наследованием и динамической типизацией.

Есть возможность обработки событий и фоновых действий.

Парсер команд на русском языке

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

Модульный принцип построения платформы

Платформа ТОМ строится по модульному принципу и состоит из нескольких частей:

1. Текстовый парсерный движок реализован в виде динамической библиотеки tom.dll

2. Интерфейсная оболочка (Front-end) служит для отображения текста и ввода команд игрока.

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

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

Поддержка HTML и прочих тегов

ТОМ позволяет использовать как HTML разметку, так и любые другие теги. Текст, заключенный в < > прозрачен для ядра ТОМа и может быть обработан интерфейсом при разборе текста перед его выводом.

Вся тяжесть обработки HTML тегов и прочей разметки ложится на front-end. Полнота поддержки HTML зависит от конкретного интерфейса.

Версия 0.9.3.1

скачать

Консольный интерфейс: constom.exe

Constom.GIF

Консольный интерфейс является простым примером для разработки front-end приложений к ТОМу версии 0.9.3.1.

Исходный модуль консольного интерфейса constom.cpp на языке C доступен для свободного скачивания.

Constom поддерживает тег смены цвета шрифта и несколько служебных тегов.

TOM API 0.9.3.1

Интерфейс между ядром версии 0.9.3.1 и оболочкой достаточно прост, построен на нескольких функциях ядра. Любой желающий может использовать ядро платформы в своих разработках.

Назначение функций:

  • char* RunFile(char*FileName)
    • Выполняет скрипт из указанного файла.
    • Возвращает текст, сгенерированный при выполненнии скрипта.
  • char* RunText(char*Statement)
    • Вычисляет выражение или выполняет скрипт переданный в строке.
    • Возвращает результат вычисления. Текст сгенерированный при выполненнии скрипта пишется в лог.
  • char* Command(char*Input)
    • Выполняет команды на русском языке.
    • Возвращает текст, сгенерированный при выполненнии команды.

ТОМилена

Первым удачным примером интеграции движка ТОМ является платформа Милена.

TOM Milena.JPG

Милена может выступать как полноценный оконный интерфейс ТОМа с поддержкой HTML разметки.

Поддерживаются html-тэги: <i>, <b>, <u>, <center>, <h1>..<h9>, <font>, <img>, а также специальные тэги: <pause>(задержка до нажатия клавиши или временная задержка), <clear>(очистка экрана) и <music>(воспроизведение музыки).


Подробнее о тэге <pause>.

Тэг имеет специальный атрибут interval, задающий время паузы в миллисекундах. Если он не определён, интерпретатор ждет нажатия кнопки. Пример: %<pause interval="500">//Задержка на 500 миллисекунд


Подробнее о тэге <music>.

Тэг имеет несколько атрибутов: name(имя загруженного файла в системе(чисто условное)), src(путь к файлу), loop(если атрибут присутствует, звук зацикливается), event(принимает одно из 3 значений: "play", "pause" и "stop", если атрибут отсутствует его значение принимается за "play"). Значения атрибутов должны содержаться в двойных или одинарных кавычках. Пример:

%<music name="главная тема" src="1.mp3" loop="">//Эта строка загружает и начинает воспроизведение музыки
%Нажмите любую клавишу, чтобы остановить воспроизведение<pause>
%<music name="главная тема" event="stop">//Эта строка останавливает воспроизведение музыки с условным именем "главная тема"

Версия 0.9.4.х

скачать

Для версий 0.9.4.х декларируется обратная совместимость* с v.0.9.3.1, что гарантирует возможность проигрывания игр, сделанных для версии 0.9.3.1 и использование разработанных для неё библиотек.

  • *совместимость не полная - возможности, которые никогда не были использованы, в v.0.9.4.х могут отсутствовать.


В плюсе:

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


Интерфейс на основе HGE

TOMonHGE.JPG

Интерфейс реализован на основе полноценного графического движка HGE, что в будущем позволяет нарастить графические возможности платформы и использовать различные спецэффекты.

ТОМ API 0.9.4.х

ТОМ API состоит из нескольких функций tom.dll:

  • RegFunction() - регистрирует дополнительные внешние функции;
  • Init() - запускает движок;
  • RunText() - выполняет переданный текст, возвращает результат;
  • Exit() - останавливает движок.

Еще есть альтернативные функции, на случай если ваш интерфейс или плагин не использует UNICODE:

  • RegFunctionANSI() - работает аналогично RegFunction();
  • RunTextANSI() - работает аналогично RunText();

Внешние функции

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

После регистрации внешней функции её можно вызвать из командной строки >MyFunction Arg или из кода игры: MyFunction(Arg).


Существует 5 специальных внешних функций, необходимых для работы ТОМа:

  • print - выводит текст на экран;
  • input - ввод из командной строки;
  • error - выводит информацию об ошибке;
  • debug - выводит отладочную информацию;
  • speech - читает переданный текст голосом.

Обязательными являются только функции print и input.

Эти 5 функций также можно вызывать из командной строки и из кода игры, хотя особого смысла в этом нет - движок сам вызывает их когда это необходимо.

Плагины

Плагины - это специализированные dll. Имя файла плагина должно соответствовать маске *.plg.dll

Плагины грузятся при старте платформы из папки движка и из подпапки plugins\ в каталоге движка, а также при запуске игры из папки игры и из подпапки plugins\ в каталоге игры.

В момент загрузки плагины регистрируют свои собственные функции, которые расширяют набор стандартных функций ТОМа.


В комплект поставки включены два плагина:

  • tommci.plg.dll обеспечивающий проигрывание музыки;
  • speech.plg.dll обеспечивающий проговаривание выводимого текста.

Общее для 0.9.x.x

Совместимость версий делает возможным использование общих библиотек и инструментов:

Библиотеки

В пакет библиотек входят:

Стандартная библиотека ТОМ:

  • модули стандартной библиотеки (каталог Libs4TOM\std.lib);
  • демо для стандартной библиотеки (файл Libs4TOM\std_test.tom);
  • автоматизированные тесты модулей стандартной библиотеки (каталог Libs4TOM\tests);
  • портированные на стандартную библиотеку ТОМ игры рТАДС - Плащ Тьмы и Золотой череп (файлы Cloak_of_Darkness.tom и GOLDSKLR_std.tom).

Частично портированная библиотека rTADS:

  • файлы библиотеки rTADS (каталог Libs4TOM\rTADS.lib);
  • портированная игра рТАДС - Золотой череп (файл GOLDSKLR_rTADS.tom).

Консольный плеер Constom (каталог Libs4TOM\Bin).

Утилита для автоматического тестирования ТОster (каталог Libs4TOM\Bin).


Стандартная библиотека

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

Смотрите также подробное описание библиотеки и пошаговые уроки создания игры на основе стандартной библиотеки.


Модули стандартной библиотеки:

  • UnusVerb.tml Содержит список неиспользуемых глаголов, генерит осмысленные сообщения для комманд с глаголами из списка.
  • Main.tml Содержит минимально-необходимый набор функциональности - классы для локаций, предметов, персонажей и декораций, действия осмотреться, осмотреть, взять, дать, положить, идти, войти, выйти, сказать,
  • Physics.tml
  • Map.tml Позволяет размещать локации на карте, поддерживает перемещения по компасным направлениям - сзюв
  • Containers.tml
  • Light.tml

Порт библиотеки rTADS

пока ограничивается портированием на ТОМ очень простой игры "Золотой череп".

Инструменты

Генератор словоформ

Удобный генератор словоформ от Александра:

Tom g.PNG

Текущая версия 0.8.2.158

План развития платформы

Ветка развития 0.10 (отдалённое будущее)

Запущена в разработку...

Ветка развития 2.0 (весьма отдалённое будущее)

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

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


Ведутся эксперименты. Часть перспективных разработок удачно перенесены в версию 0.9.4.x.

Changelog

Версия v.0.9.4.10 beta

лежит здесь

  • ударение в лексемах более не влияет на парсер;
  • в тэге <body> теперь работают стандартные параметры "text", "link", "topmargin", "bottommargin", "leftmargin", "rightmargin"

например:

%<body background=foto\bgStart.jpg text=aqua leftmargin=100 rightmargin=80 topmargin=50>

еще пока не сделано:

  • не исправлена ошибка, возникающая при выгрузке плагинов.
  • пути файлов в тегах берутся относительно папки движка, а не игры.

Версия v.0.9.4.9 beta (багфикс)

  • исправлено сохранение игр;
  • добавлен выбор значения свойств по локации (предмет_по_месту);
  • интерфейс переписан с учётом потокобезопасности.
  • речевой плагин временно убран из архива - не корректно завершает работу.

Версия v.0.9.4.8 beta

  • финальная версия в этом направлении.

Версия v.0.9.4.7 альфа

  • Сделана загрузка плагинов.
  • Добавлена интерфейсная функция pause() / пауза(). Рекомендуется использовать вместо тэга <pause>.
  • Доработана обработка ошибки с незакрытыми скобками в коде игры.


Версия v.0.9.4.6 альфа

  • доделана нормализация знаков препинания;
  • исправлены некоторые ошибки.

Версии присвоен статус "альфа". Всё основное, что планировалось в ветке 0.9.4.х, сделано. Осталось доделать небольшие фичи, после чего эта версия перейдет в "бету" и будет рекомендована как основная официальная версия.


Версия v.0.9.4.5 (багфикс)

  • Исправлен ряд ошибок, критичных и не очень. Спасибо Александру.


Версия v.0.9.4.4 dev

  • Добавлена speech.dll для чтения текста.


Версия v.0.9.4.3 (багфикс)

  • Исправлена критическая ошибка. В остальном без изменений.


Версия v.0.9.4.2 dev

  • Доделана система ввода-вывода (за исключением голоса и коррекции знаков препинания)
  • Исправлены старые ошибки
  • Добавлены новые ошибки


Версия v.0.9.4.1 dev

  • Исправлено несколько мелких ошибок.
  • Воспроизведение музыки приведено к полной совместимости с версией 0.9.3.1


Версия v.0.9.4.0 dev

В плюсе:

+ новый графический интерфейс и новый механизм взаимодействия движка с интерфейсом.

+ основной цикл убран внутрь dll и выполняется в отдельном потоке.

+ система регистрации внешних функций.

+ вычисление выражений непосредственно в командной строке (удобно для отладки)

+ проигрывание музыки реализовано в отдельной dll, независимой от текстового движка.

+ тестить можно на старых играх - мышках и спелеологисте.


В минусе:

- синтез речи - будет реализован отдельно от текстового движка.

- пост-обработка текста пока отсутствует, будет переделываться.

Версия v.0.9.3.1 бета

лежит здесь

  • Изменен принцип подстановки произношения - оно теперь подставляется непосредственно в тексте в квадратных скобках:
слово[правильное произношение слова] 
  • добавлена команда "повторить", которая повторяет последний произнесенный текст (работает только если в системе установлен голос)
  • усовершенствован механизм подстановки альтенативных форм предлогов ("с"->"со", "из"->"изо" и т.д.).


Архив по старым версиям