Skip to content

Цикл обработки команд

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

Примеры команд STEAD3:

  • load <файл>; - загрузка
  • save <файл>; - выгрузка
  • use <объект>,<объект>; - использование объекта на объект
  • use <объект>; - использование объекта в инвентаре
  • act <объект>; - действие на объект
  • act <$объект>,аргументы...; - ссылка на системный объект
  • go <переход>; - переход
  • look; - осмотреться
  • inv; - получить инвентарь
  • way; - получить список переходов

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

Каким образом STEAD3 обрабатывает команды?

Интерпретатор работает с Lua частью через специальный системный объект iface (переменная ссылка на "@iface").

Этот объект создаётся внутри STEAD3, а для графической версии интерпретатора INSTEAD, пересоздаётся специальным модулем ext/gui.lua. Выполнение команды -- это вызов iface:cmd(команда). Обратите внимание на ':'. Такая запись это синоним: iface.cmd(iface, команда).

Команда разбивается на части, и записывается в специальный массив std.cmd. Так, в случае команды load, в std.cmd[1] будет записано "load", а в std.cmd[2] -- путь к файлу.

Затем происходит вызов game:cmd(std.cmd). Это и есть то место, где команда обрабатывается игрой.

После чего вывод (возвращаемое значение) пропускается через iface:fmt(). Который в свою очередь вызывает std.fmt.

В std.fmt ссылки в выводе игры {} превращаются в ссылки для интерпретатора.