Как создавать игру
Игра представляет из себя каталог, в котором должен находиться скрипт (текстовый файл) main3.lua. (Обратите внимание, наличие файла main3.lua означает, что вы пишите игру на STEAD3!) Другие ресурсы игры (скрипты на lua, графика и музыка) должны находиться в рамках этого каталога. Все ссылки на ресурсы делаются относительно текущего каталога -- каталога игры.
В начале файла main3.lua может быть определён заголовок, состоящий из тегов (строк специального вида). Теги должны начинаться с символов: два минуса.
--
Два минуса -- это комментарий с точки зрения Lua. На данный момент существуют следующие теги.
Тег $Name: содержит название игры в кодировке UTF-8. Пример использования тега:
-- $Name: Самая интересная игра!$
Затем следует (желательно) задать версию игры:
-- $Version: 0.5$
И указать авторство:
-- $Author: Анонимный любитель текстовых приключений$
Дополнительную информацию об игре, можно задать тегом Info:
-- $Info: Это ремейк старой игры\nС ZX specturm$
Обратите внимание на \n в Info, это станет переводом строки, когда вы выберете пункт "Информация" в INSTEAD.
Если вы разрабатываете игру в Windows, то убедитесь, что ваш редактор поддерживает кодировку UTF-8 без BOM. Именно эту кодировку следует использовать при написании игры!
Далее, обычно следует указать модули, которые требуются игре. О модулях будет рассказано отдельно.
require "fmt" -- некоторые функции форматирования
fmt.para = true -- включить режим параграфов (отступы)
Кроме того, обычно стоит определить обработчики по умолчанию: game.act, game.use, game.inv, о которых также будет рассказано ниже.
game.act = 'Не работает.';
game.use = 'Это не поможет.';
game.inv = 'Зачем мне это?';
Инициализацию игры следует описывать в функции init, которая вызывается движком в самом начале. В этой функции удобно инициализировать состояние игрока на начало игры, или какие-то другие действия, нужные для первоначальной настройки мира игры. Впрочем, функция ''init'' может быть и не нужна.
function init() -- добавим в инвентарь нож и бумагу
take 'нож'
take 'бумага'
end
После того как игра проинициализирована, выполняется запуск игры. Вы можете определить функцию start(), которая запускается непосредственно перед запуском игры. Это значит, например, что в случае загрузки сохранённой игры, start() вызовется после того, как сохранение будет прочитано,
function start(load) -- восстановить состояние?
if load then
dprint "Это загрузка состояния."
else
dprint "Это старт игры."
end
-- нам сейчас не нужно ничего делать
end
Графический интерпретатор ищет доступные игры в каталоге games. Unix-версия интерпретатора, кроме этого каталога, просматривает также игры в каталоге ~/.instead/games. Windows-версия: %LOCALAPPDATA%\instead\games (ниже Vista: Documents and Settings\USER\Local Settings\Application Data\instead\games). В Windows- и standalone-Unix-версии игры ищутся в каталоге ./appdata/games, если он существует.
В некоторых сборках INSTEAD (в Windows, в Linux если проект собран с gtk и др.) можно открывать игру по любому пути из меню "Выбор игры". Либо, нажать f4. Если в каталоге с играми присутствует только одна игра, INSTEAD запустит её автоматически, это удобно, если вы хотите распространять свою игру вместе с движком.
Таким образом, вы кладёте игру в свой каталог и запускаете INSTEAD.
Важно!
При написании игры, настоятельно рекомендуется использовать отступы для оформления кода игры, как это сделано в примере из данного руководства, этим самым вы сократите количество ошибок и сделаете свой код наглядней!
Ниже приводится минимальный шаблон для вашей первой игры:
-- $Name: Моя первая игра$
-- $Version: 0.1$
-- $Author: Анонимный автор$
require "fmt"
fmt.para = true
game.act = 'Гм...';
game.use = 'Не сработает.';
game.inv = 'Зачем это мне?';
function init()
-- инициализация, если она нужна
end