Skip to content

Как создавать игру

Игра представляет из себя каталог, в котором должен находиться скрипт (текстовый файл) 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.

Важно!

При написании игры, настоятельно рекомендуется использовать отступы для оформления кода игры, как это сделано в примере из данного руководства, этим самым вы сократите количество ошибок и сделаете свой код наглядней!

Ниже приводится минимальный шаблон для вашей первой игры:

lua
-- $Name: Моя первая игра$
-- $Version: 0.1$
-- $Author: Анонимный автор$

require "fmt"
fmt.para = true

game.act = 'Гм...';
game.use = 'Не сработает.';
game.inv = 'Зачем это мне?';

function init()
-- инициализация, если она нужна
end