mingw32ce blobs added

This commit is contained in:
p.kosyh 2011-08-01 07:53:26 +00:00
parent e07fd303e2
commit f0cd56d34c
3 changed files with 150 additions and 185 deletions

View file

@ -1,16 +1,19 @@
===== 0. General information =====
Game code for STEAD is written in lua (5.1), therefore it is useful to know the language, though not necessary. The engine code in lua is about ~3000 lines long. And it is the best documentation.
Game code for STEAD is written in //lua// (5.1), therefore it is useful to know the language, though not necessary. The engine code in lua is about ~3000 lines long. And it is the best documentation.
The main game window contains information about static and dynamic parts of the scene, active events and the scene picture with possible passages to other scenes (in the graphic interpreter).
The dynamic part of a scene is composed of descriptions of the scene objects. It is always shown.
//Static part// of the scene is shown only once, when the player enters the scene. Also it is shown when the ''look'' command is repeated (click on the scene name in the graphic interpreter).
Static part of the scene is shown only once, when the player enters the scene. Also it is shown when the “look” command is repeated (click on the scene name in the graphic interpreter).
The //dynamic part// of a scene is composed of descriptions of the scene objects. It is always shown.
Inventory contains objects, that the player can access in every scene. The player can interact with the inventory objects or use inventory objects on other objects in the scene or inventory.
//Inventory// contains objects, that the player can access in every scene. The player can interact with the inventory objects or use inventory objects on other objects in the scene or inventory.
<WRAP center round info>
One should note that the “inventory” is defined rather vaguely. For example it may contain such objects as “open”, “examine”, “use”, etc.
</WRAP>
Possible actions of the player are:
@ -19,23 +22,26 @@ Possible actions of the player are:
* using an inventory object;
* using an inventory object on a scene object;
* using an inventory object on an inventory object;
* using a scene object on a scene object (scene_use mode);
* using a scene object on an inventroy object (scene_use mode);
* using a scene object on a scene object (''scene_use'' mode);
* using a scene object on an inventroy object (''scene_use'' mode);
* passing to another scene;
Each game is a directory with a “main.lua” script. Other game resources (lua scripts, images, music) should be in this directory. All references to the resources are given relative to this game directory.
Each game is a directory with a ''main.lua'' script. Other game resources (lua scripts, images, music) should be in this directory. All references to the resources are given relative to this game directory.
At the beginning of “main.lua” file a header may be defined. It consists of tags. Each tag should start with '--' symbols — lua comments. Right now only one tag exists: “$Name:”. It should contain the name of the game in UTF-8 encoding. For example:
<code>
At the beginning of ''main.lua'' file a header may be defined. It consists of tags. Each tag should start with ''--'' symbols — lua comments. Right now only one tag exists: ''$Name:''. It should contain the name of the game in UTF-8 encoding. For example:
<code lua>
-- $Name: The most interesting game!$
</code>
From version 1.2.0 after headers you must define required STEAD API version. It is "1.4.0" currently.
<code>
<code lua>
instead_version "1.4.0"
</code>
<WRAP center round important>
Without this line STEAD API will stay in compatible(legacy) mode.
</WRAP>
Game initialization should be defined as init function. For example:
//Game initialization// should be defined as init function. For example:
<code>
function init()
me()._know_truth = false
@ -44,17 +50,14 @@ function init()
end
</code>
Without this line STEAD API will stay in compatible(legacy) mode.
The graphic interpreter searches for available games in the ''games'' directory. Unix version also checks ''~/.instead/games''. Windows version (>=0.8.7) checks ''Documents and Settings/USER/Local Settings/Application Data/instead/games''.
The graphic interpreter searches for available games in the “games” directory. Unix version also checks “~/.instead/games”. Windows version (>=0.8.7) checks “Documents and Settings/USER/Local Settings/Application Data/instead/games”.
From version 1.2.0 Windows and Unix standalone builds looks into ./appdata/games dir, if it exists.
From version 1.2.0 Windows and Unix standalone builds looks into ''./appdata/games'' dir, if it exists.
===== 1. Scene =====
A scene is a game unit. Within it a player can examine all the scene objects and interact with them. A game should contain at least one scene with the name “main”.
<code>
<code lua>
main = room {
nam = 'main room',
dsc = 'You are in a large room.',
@ -67,16 +70,16 @@ The “nam” attribute for a scene will be the scene name when it is played. Th
The “dsc” attribute is a description of a static part of the scene. It is shown once when entering the scene or after the explicit “look” command.
Attention!!! You may use symbol “;” instead of “,”. For example:
<code>
<code lua>
main = room {
nam = 'main room';
dsc = 'You are in a large room.';
};
</code>
Attention!!! If your creative design requires the static part description to be shown every time, you may define the “forcedsc” parameter for your game (at the start).
<code>
<code lua>
game.forcedsc = true;
</code>
</code lua>
Or similarly set the “forcedsc” for particular scenes.
For long descriptions the following format is convenient:
@ -85,7 +88,7 @@ For long descriptions the following format is convenient:
In this format line breaks are ignored. If you need paragraph breaks in the description, use the “^” symbol.
<code>
<code lua>
dsc = [[ First paragraph. ^^
Second paragraph.^^

View file

@ -1065,7 +1065,7 @@ require "dbg"
<code lua>
main = room {
forcedsc = true;
dsc = [[От автора. Эту игру я писал очень {note1:долго}.]];
dsc = [[От автора. Эту игру я писал очень {note1|долго}.]];
obj = {
xact('note1', [[Больше 10 лет.]]);
}
@ -1081,8 +1081,8 @@ main = room {
main = room {
forcedsc = true;
dsc = [[Я в комнате.]];
xdsc = [[ Я вижу {apple:яблоко} и {knife:нож}. ]];
other = [[ Еще здесь лежат {chain:цепь} и {tool:пила}.]];
xdsc = [[ Я вижу {apple|яблоко} и {knife|нож}. ]];
other = [[ Еще здесь лежат {chain|цепь} и {tool|пила}.]];
obj = {
xdsc(), -- 'xdsc method by default'
xdsc('other'),
@ -1095,7 +1095,7 @@ main = room {
main = xroom {
forcedsc = true;
dsc = [[Я в комнате.]];
xdsc = [[ Я вижу {apple:яблоко} и {knife:нож}. ]];
xdsc = [[ Я вижу {apple|яблоко} и {knife|нож}. ]];
obj = {
'apple', 'knife', 'chain', 'tool',
}
@ -1116,12 +1116,12 @@ format.filter = nil -- пользовательская функция заме
==== Форматирование ====
Вы можете делать простое форматирование текста с помощью функций:
* txtc() - разместить по центру;
* txtr() - разместить справа;
* txtl() - разместить слева;
* txttop() - сверху строки;
* txtbottom() - снизу строки;
* txtmiddle() - середина строки (по умолчанию);
* ''txtc()'' - разместить по центру;
* ''txtr()'' - разместить справа;
* ''txtl()'' - разместить слева;
* ''txttop()'' - сверху строки;
* ''txtbottom()'' - снизу строки;
* ''txtmiddle()'' - середина строки (по умолчанию);
Например:
<code lua>
@ -1133,10 +1133,10 @@ main = room {
Вы также можете менять оформление текста с помощью комбинаций функций:
* txtb() - жирный;
* txtem() - курсив;
* txtu() - подчеркнутый;
* txtst() - перечеркнутый;
* ''txtb()'' - жирный;
* ''txtem()'' - курсив;
* ''txtu()'' - подчеркнутый;
* ''txtst()'' - перечеркнутый;
Например:
<code lua>
@ -1144,12 +1144,10 @@ main = room {
nam = 'Intro',
dsc = 'Вы находитесь в комнате '..txtb('main')..'.',
}
Начиная с версии 1.1.0 вы также можете создавать неразрываемые строки с помощью: txtnb();
</code>
Начиная с версии 1.1.0 вы также можете создавать неразрываемые строки с помощью: ''txtnb()''.
==== Меню ====
Вы можете делать меню в области инвентаря, определяя объекты с типом menu. При этом, обработчик меню будет вызван после одного клика мыши. Если обработчик не возвращает текст, то состояние игры не изменяется. Например, реализация кармана:
Вы можете делать меню в области инвентаря, определяя объекты с типом ''menu''. При этом, обработчик меню будет вызван после одного клика мыши. Если обработчик не возвращает текст, то состояние игры не изменяется. Например, реализация кармана:
<code lua>
pocket = menu {
State = false,
@ -1213,83 +1211,86 @@ end
==== goto из обработчика exit ===
Если вы выполните goto из обработчика exit, то получите переполнение стека, так как goto снова и снова будет вызывать метод exit. Вы можете избавиться от этого, если вставите проверку, разрушающую рекурсию. Например:
Если вы выполните ''goto'' из обработчика ''exit'', то получите переполнение стека, так как ''goto'' снова и снова будет вызывать метод ''exit''. Вы можете избавиться от этого, если вставите проверку, разрушающую рекурсию. Например:
<code lua>
exit = function(s, t)
if t == 'dialog' then return; end
return goto('dialog');
end
</code>
<WRAP center round info>
Начиная с версии 0.9.1 движок сам разрывает рекурсию.
</WRAP>
Вы можете также делать goto из обработчиков enter.
Вы можете также делать ''goto'' из обработчиков ''enter''.
==== Динамически создаваемые ссылки. ====
Динамически создаваемые ссылки могут быть реализованы разным способом. Ниже приводится пример, основанный на использовании объектов vway. Для добавления ссылки можно использовать запись:
Динамически создаваемые ссылки могут быть реализованы разным способом. Ниже приводится пример, основанный на использовании объектов ''vway''. Для добавления ссылки можно использовать запись:
<code lua>
objs(home):add(vway('Дорога', 'Я заметил {дорогу}, ведущую в лес...', 'forest'));
</code>
Для удаления ссылки можно использовать метод del.
Для удаления ссылки можно использовать метод ''del''.
<code lua>
objs(home):del('Дорога');
</code>
Для определения наличия ссылки в сцене -- метод srch.
Для определения наличия ссылки в сцене -- метод ''srch''.
<code lua>
if not objs(home):srch('Дорога') then
objs(home):add(vway('Дорога', 'Я заметил {дорогу}, ведущую в лес...', 'forest'));
end
</code>
Динамические ссылки удобно создавать в обработчике enter, или по мере необходимости в любом месте кода игры. Если ссылки создаются в текущей сцене, то последний пример можно упростить:
Динамические ссылки удобно создавать в обработчике ''enter'', или по мере необходимости в любом месте кода игры. Если ссылки создаются в текущей сцене, то последний пример можно упростить:
<code lua>
if not seen('Дорога') then
objs():add(vway('Дорога', 'Я заметил {дорогу}, ведущую в лес...', 'forest'));
end
</code>
Кроме того, вы можете просто включать и выключать ссылки с помощью enable(), disable(), например:
Кроме того, вы можете просто включать и выключать ссылки с помощью ''enable()'', ''disable()'', например:
<code lua>
seen('Дорога', home):disable();
exsist('Дорога', home):enable();
</code>
Вы можете создавать выключенные vobj и vway следующим образом:
Вы можете создавать выключенные ''vobj'' и ''vway'' следующим образом:
<code lua>
obj = {vway('Дорога', 'Я заметил {дорогу}, ведущую в лес...', 'forest'):disable()},
</code>
И затем включать их по индексу в массиве obj или иным способом (seen/srch/exist):
И затем включать их по индексу в массиве ''obj'' или иным способом (''seen''/''srch''/''exist''):
<code lua>
objs()[1]:enable();
</code>
==== Кодирование исходного кода игры (начиная с версии 0.9.3) ====
Если вы не хотите показывать исходный код своих игр, вы можете закодировать исходный код с помощью sdl-instead -encode <путь к файлу> [выходной путь] и использовать его с помощью lua функции doencfile. При этом главный файл main.lua необходимо оставлять текстовым. Таким образом схема выглядит следующим образом (game -- закодированный game.lua):
Если вы не хотите показывать исходный код своих игр, вы можете закодировать исходный код с помощью ''sdl-instead -encode <путь к файлу> [выходной путь]'' и использовать его с помощью lua функции ''doencfile''. При этом главный файл ''main.lua'' необходимо оставлять текстовым. Таким образом схема выглядит следующим образом (''game'' -- закодированный ''game.lua''):
main.lua
<code lua>
-- $Name: Моя закрытая игра!$
doencfile("game");
</code>
ЗАМЕЧАНИЕ:
<WRAP center round important>
Не используйте компиляцию игр с помощью luac, так как luac создает платформозависимый код!
Однако, компиляция игр может быть использована для поиска ошибок в коде.
</WRAP>
==== Запаковка ресурсов (начиная с версии 1.4.0) ====
Вы можете упаковать ресурсы игры (графику, музыку, темы) в файл .idf, для этого поместите все ресурсы в каталог data и запустите INSTEAD:
instead -idf <путь к data>
''instead -idf <путь к data>''
При этом в текущем каталоге должен будет создастся файл data.idf. Поместите его в каталог с игрой. Теперь ресурсы игры в виде отдельных файлов можно удалить.
При этом в текущем каталоге должен будет создастся файл ''data.idf''. Поместите его в каталог с игрой. Теперь ресурсы игры в виде отдельных файлов можно удалить.
Вы можете запаковать в формат .idf всю игру:
Вы можете запаковать в формат ''.idf'' всю игру:
''instead -idf <путь к игре>''
instead -idf <путь к игре>
Игры в формате ''idf'' можно запускать как обычные игры ''instead'' (как если бы это были каталоги) а также из командной строки:
Игры в формате idf можно запускать как обычные игры instead (как если бы это были каталоги) а также из командной строки:
instead game.idf
''instead game.idf''
==== Переключение между игроками ====
Вы можете создать игру с несколькими персонажами и время от времени переключаться между ними (см. change_pl). Но вы можете также использовать этот трюк для того, что бы иметь возможность переключаться между разными типами инвентаря.
Вы можете создать игру с несколькими персонажами и время от времени переключаться между ними (см. ''change_pl''). Но вы можете также использовать этот трюк для того, чтобы иметь возможность переключаться между разными типами инвентаря.
==== Использование первого параметра обработчика ====
Пример кода.
@ -1312,7 +1313,7 @@ stone = obj {
</code>
==== Использование set_music ====
Вы можете использовать set_music для проигрывания звуков, задавая второй параметр -- счетчик циклов проигрывания звукового файла.
Вы можете использовать ''set_music'' для проигрывания звуков, задавая второй параметр -- счетчик циклов проигрывания звукового файла.
Вы можете написать для игры свой проигрыватель музыки, создав его на основе живого объекта, например:
<code lua>
@ -1337,7 +1338,7 @@ mplayer = obj {
lifeon('mplayer');
</code>
Вы можете использовать функции get_music_loop и get_music, для того, чтобы запоминать прошлую мелодию, и потом восстанавливать ее, например:
Вы можете использовать функции ''get_music_loop'' и ''get_music'', для того, чтобы запоминать прошлую мелодию, и потом восстанавливать ее, например:
<code lua>
function save_music(s)
@ -1359,11 +1360,13 @@ end,
-- ....
</code>
<WRAP center round info>
Начиная с версии 0.8.5 функции save_music и restore_music уже присутствуют в библиотеке.
</WRAP>
Начиная с версии 0.8.5 функции save_music и restore_music уже присутствуют в библиотеке.
==== Живые объекты ====
Если вашему герою нужен друг, одним из способов может стать метод life этого персонажа, который всегда переносит объект в локацию игрока:
Если вашему герою нужен друг, одним из способов может стать метод ''life'' этого персонажа, который всегда переносит объект в локацию игрока:
<code lua>
horse = obj {
nam = 'лошадь',
@ -1383,11 +1386,11 @@ end
==== Таймер ====
Начиная с версии 1.1.0 в instead появлилась возможность использовать таймер. (Только в графической версии интерпретатора.)
Таймер программируется с помощью объекта timer.
Таймер программируется с помощью объекта ''timer''.
* timer:set(ms) -- задать интервал таймера в ms
* timer:stop() -- остановить таймер
* timer.callback(s) -- функция-обработчик таймера, которая вызывается через заданный диапазон времени
* ''timer:set(ms)'' -- задать интервал таймера в ms
* ''timer:stop()'' -- остановить таймер
* ''timer.callback(s)'' -- функция-обработчик таймера, которая вызывается через заданный диапазон времени
Функция таймера может возвратить команду интерфейса stead, которую нужно выполнить после того, как движок выполнит обработчик. Например:
<code lua>
@ -1407,11 +1410,11 @@ main = room {
</code>
==== Клавиатура ====
Начиная с версии 1.1.0 в instead появилась возможность анализировать ввод с клавиатуры (только в графической версии интерпретатора). Для этого используется объект input.
Начиная с версии 1.1.0 в instead появилась возможность анализировать ввод с клавиатуры (только в графической версии интерпретатора). Для этого используется объект ''input''.
input.key(s, pressed, key) -- обработчик клавиатуры; pressed -- нажатие или отжатие. key -- символьное имя клавиши;
''input.key(s, pressed, key)'' -- обработчик клавиатуры; ''pressed'' -- нажатие или отжатие. ''key'' -- символьное имя клавиши;
Обработчик может вернуть команду интерфейса stead, в этом случае клавиша не будет обработана интерпретатором.
Обработчик может вернуть команду интерфейса ''stead'', в этом случае клавиша не будет обработана интерпретатором.
Например:
<code lua>
input.key = function(s, pr, key)
@ -1439,9 +1442,9 @@ main = room {
</code>
==== Мышь ====
Начиная с версии 1.1.5 в instead появилась возможность анализировать события мыши. (Только в графической версии интерпретатора.) Для этого используется объект input.
Начиная с версии 1.1.5 в instead появилась возможность анализировать события мыши. (Только в графической версии интерпретатора.) Для этого используется объект ''input''.
input.click(s, pressed, mb, x, y, px, py) -- обработчик клика мыши; pressed -- нажатие или отжатие. mb -- номер кнопки (1 - левая), x и y -- координаты клика относительно левого верхнего угла. px и py присутствуют, если клик произошел в области картинки сцены и содержит координаты клика относительно левого верхнего угла картинки.
''input.click(s, pressed, mb, x, y, px, py)'' -- обработчик клика мыши; ''pressed'' -- нажатие или отжатие. ''mb'' -- номер кнопки (1 - левая), ''x'' и ''y'' -- координаты клика относительно левого верхнего угла. ''px'' и ''py'' присутствуют, если клик произошел в области картинки сцены и содержит координаты клика относительно левого верхнего угла картинки.
Обработчик может вернуть команду интерфейса stead, в этом случае клик не будет обработан интерпретатором.
@ -1473,7 +1476,7 @@ main = room {
};
</code>
Пример прослойки, которая реализует вызов метода click в текущей комнате при клике на картинку:
Пример прослойки, которая реализует вызов метода ''click'' в текущей комнате при клике на картинку:
<code lua>
input.click = function(s, press, mb, x, y, px, py)
if press and px then
@ -1497,10 +1500,12 @@ main = room {
};
</code>
<WRAP center round important>
Внимание!!! Начиная с 1.2.0 рекомендуется использовать модуль click.
</WRAP>
==== Динамическое создание объектов ====
Вы можете использовать функции new и delete для создания и удаления динамических объектов. Примеры:
Вы можете использовать функции ''new'' и ''delete'' для создания и удаления динамических объектов. Примеры:
<code lua>
new ("obj { nam = 'test', act = 'test' }")
@ -1510,7 +1515,7 @@ n = new('myconstructor()');
delete(n)
</code>
new воспринимает строку-аргумент как конструктор объекта. Результатом выполнения конструктора должен быть объект. Таким образом в аргументе обычно задан вызов функции-конструктора. Например:
''new'' воспринимает строку-аргумент как конструктор объекта. Результатом выполнения конструктора должен быть объект. Таким образом в аргументе обычно задан вызов функции-конструктора. Например:
<code lua>
function myconstructor()
local v = {}
@ -1519,13 +1524,13 @@ function myconstructor()
return obj(v);
end
</code>
Созданный объект будет попадать в файл сохранения. new() возвращает реальный объект; чтобы получить его имя, если это нужно, используйте функцию deref:
Созданный объект будет попадать в файл сохранения. ''new()'' возвращает реальный объект; чтобы получить его имя, если это нужно, используйте функцию ''deref'':
<code lua>
o_name = deref(new('myconstructor()'));
delete(o_name);
</code>
==== Сложный вывод из обработчиков ====
Иногда вывод обработчика может формироваться сложным образом, в зависимости от условий. В таких случаях удобно пользоваться функциями p() и pn(). Эти функции добавляют текст в буфер, связанный с обработчиком, который будет возвращен из обработчика.
Иногда вывод обработчика может формироваться сложным образом, в зависимости от условий. В таких случаях удобно пользоваться функциями ''p()'' и ''pn()''. Эти функции добавляют текст в буфер, связанный с обработчиком, который будет возвращен из обработчика.
<code lua>
dsc = function(s)
p "На полу стоит {бочка}."
@ -1534,11 +1539,11 @@ dsc = function(s)
end
end
</code>
Функция pn() выполняет вывод текста в буфер, дополняя его переводом строки. Функция p() дополняет вывод пробелом.
Функция ''pn()'' выполняет вывод текста в буфер, дополняя его переводом строки. Функция ''p()'' дополняет вывод пробелом.
Начиная с версии 1.1.6 существует функция pr(), которая не выполняет дополнение вывода.
Начиная с версии 1.1.6 существует функция ''pr()'', которая не выполняет дополнение вывода.
Для очистки буфера, используйте pclr(). Если вам нужно вернуть статус действия, используйте pget(), или просто используйте return.
Для очистки буфера, используйте ''pclr()''. Если вам нужно вернуть статус действия, используйте ''pget()'', или просто используйте ''return''.
<code lua>
use = function(s, w)
if w == apple then
@ -1552,9 +1557,9 @@ end
</code>
==== Отладка ====
Для того, чтобы во время ошибки увидеть стек вызовов функций lua, вы можете запустить sdl-instead с параметром -debug. При этом в windows версии интерпретатора будет создана консоль отладки.
Для того, чтобы во время ошибки увидеть стек вызовов функций lua, вы можете запустить ''sdl-instead'' с параметром ''-debug''. При этом в windows версии интерпретатора будет создана консоль отладки.
Вы можете отлаживать свою игру вообще без instead. Например, вы можете создать следующий файл game.lua:
Вы можете отлаживать свою игру вообще без instead. Например, вы можете создать следующий файл ''game.lua'':
<code lua>
dofile("/usr/share/games/stead/stead.lua"); -- путь к stead.lua
dofile("main.lua"); -- ваша игра
@ -1562,26 +1567,27 @@ game:ini();
iface:shell();
</code>
И запустите игру в lua: lua game.lua.
При этом игра будет работать в примитивном shell окружении. Полезные команды: ls, go, act, use....
При этом игра будет работать в примитивном ''shell'' окружении. Полезные команды: ''ls'', ''go'', ''act'', ''use''...
Для включения простого отладчика, после version вначале файла напишите:
Для включения простого отладчика, после ''version'' вначале файла напишите:
<code lua>
require "dbg"
</code>
Отладчик вызывается по F7.
Отладчик вызывается по ''F7''.
===== 19. Темы для sdl-instead =====
Графический интерпретатор поддерживает механизм тем. Тема представляет из себя каталог, с файлом theme.ini внутри.
Графический интерпретатор поддерживает механизм тем. //Тема// представляет из себя каталог, с файлом ''theme.ini'' внутри.
Тема, которая является минимально необходимой -- это тема default. Эта тема всегда загружается первой. Все остальные темы наследуются от нее и могут частично или полностью заменять ее параметры. Выбор темы осуществляется пользователем через меню настроек, однако конкретная игра может содержать собственную тему и таким образом влиять на свой внешний вид. В этом случае в каталоге с игрой должен находиться свой файл theme.ini. Тем не-менее пользователь свободен отключить данный механизм, при этом интерпретатор будет предупреждать о нарушении творческого замысла автора игры.
Тема, которая является минимально необходимой -- это тема ''default''. Эта тема всегда загружается первой. Все остальные темы наследуются от нее и могут частично или полностью заменять ее параметры. Выбор темы осуществляется пользователем через меню настроек, однако конкретная игра может содержать собственную тему и таким образом влиять на свой внешний вид. В этом случае в каталоге с игрой должен находиться свой файл ''theme.ini''. Тем не-менее пользователь свободен отключить данный механизм, при этом интерпретатор будет предупреждать о нарушении творческого замысла автора игры.
Синтаксис theme.ini очень прост.
Синтаксис ''theme.ini'' очень прост.
<code ini>
<параметр> = <значение>
</code>
или
; комментарий
<code ini>; комментарий</code>
Значения могут быть следующих типов: строка, цвет, число.
@ -1589,106 +1595,62 @@ require "dbg"
Параметры могут принимать значения:
scr.w = ширина игрового пространства в пикселях (число)
scr.h = высота игрового пространства в пикселях (число)
scr.col.bg = цвет фона
scr.gfx.bg = путь к картинке фонового изображения (строка)
scr.gfx.cursor.x = x координата центра курсора (число) (версия >= 0.8.9)
scr.gfx.cursor.y = y координата центра курсора (число) (версия >= 0.8.9)
scr.gfx.cursor.normal = путь к картинке-курсору (строка) (версия >= 0.8.9)
scr.gfx.cursor.use = путь к картинке-курсору режима использования (строка) (версия >= 0.8.9)
scr.gfx.use = путь к картинке-индикатору режима использования (строка) (версия < 0.8.9)
scr.gfx.pad = размер отступов к скролл-барам и краям меню (число)
scr.gfx.x, scr.gfx.y, scr.gfx.w, scr.gfx.h = координаты, ширина и высота окна изображений. Области в которой располагается картинка сцены. Интерпретация зависит от режима расположения (числа)
win.gfx.h - синоним scr.gfx.h (для совместимости)
scr.gfx.mode = режим расположения (строка fixed, embedded или float). Задает режим изображения. embedded -- картинка является частью содержимого главного окна, параметры scr.gfx.x, scr.gfx.y, scr.gfx.w игнорируются. float -- картинка расположена по указанным координатам (scr.gfx.x, scr.gfx.y) и масштабируется к размеру scr.gfx.w x scr.gfx.h если превышает его. fixed -- картинка является частью сцены как в режиме embedded, но не скроллируется вместе с текстом а расположена непосредственно над ним.
win.x, win.y, win.w, win.h = координаты, ширина и высота главного окна. Области в которой располагается описание сцены (числа)
win.fnt.name = путь к файлу-шрифту (строка)
win.fnt.size = размер шрифта главного окна (размер)
win.fnt.height = междустрочный интервал как число с плавающей запятой (1.0 по умолчанию)
win.gfx.up, win.gfx.down = пути к файлам-изображениям скорллеров вверх/вниз для главного окна (строка)
win.up.x, win.up.y, win.down.x, win.down.y = координаты скроллеров (координата или -1)
win.col.fg = цвет текста главного окна (цвет)
win.col.link = цвет ссылок главного окна (цвет)
win.col.alink = цвет активных ссылок главного окна (цвет)
inv.x, inv.y, inv.w, inv.h = координаты, высота и ширина области инвентаря. (числа)
inv.mode = строка режима инвентаря (horizontal или vertical). В горизонтальном режиме инвентаря в одной строке могут быть несколько предметов. В вертикальном режиме, в каждой строке инвентаря содержится только один предмет. (число)
inv.col.fg = цвет текста инвентаря (цвет)
inv.col.link = цвет ссылок инвентаря (цвет)
inv.col.alink = цвет активных ссылок инвентаря (цвет)
inv.fnt.name = путь к файлу-шрифту инвентаря (строка)
inv.fnt.size = размер шрифта инвентаря (размер)
inv.fnt.height = междустрочный интервал как число с плавающей запятой (1.0 по умолчанию)
inv.gfx.up, inv.gfx.down = пути к файлам-изображениям скорллеров вверх/вниз для инвентаря (строка)
inv.up.x, inv.up.y, inv.down.x, inv.down.y = координаты скроллеров (координата или -1)
menu.col.bg = фон меню (цвет)
menu.col.fg = цвет текста меню (цвет)
menu.col.link = цвет ссылок меню (цвет)
menu.col.alink = цвет активных ссылок меню (цвет)
menu.col.alpha = прозрачность меню 0-255 (число)
menu.col.border = цвет бордюра меню (цвет)
menu.bw = толщина бордюра меню (число)
menu.fnt.name = путь к файлу-шрифту меню (строка)
menu.fnt.size = размер шрифта меню (размер)
menu.fnt.height = междустрочный интервал как число с плавающей запятой (1.0 по умолчанию)
menu.gfx.button = путь к файлу изображению значка меню (строка)
menu.button.x, menu.button.y = координаты кнопки меню (числа)
snd.click = путь к звуковому файлу щелчка (строка)
include = имя темы (последний компонент в пути каталога) (строка)
* ''scr.w'' = ширина игрового пространства в пикселях (число)
* ''scr.h'' = высота игрового пространства в пикселях (число)
* ''scr.col.bg'' = цвет фона
* ''scr.gfx.bg'' = путь к картинке фонового изображения (строка)
* ''scr.gfx.cursor.x'' = x координата центра курсора (число) (версия >= 0.8.9)
* ''scr.gfx.cursor.y'' = y координата центра курсора (число) (версия >= 0.8.9)
* ''scr.gfx.cursor.normal'' = путь к картинке-курсору (строка) (версия >= 0.8.9)
* ''scr.gfx.cursor.use'' = путь к картинке-курсору режима использования (строка) (версия >= 0.8.9)
* ''scr.gfx.use'' = путь к картинке-индикатору режима использования (строка) (версия < 0.8.9)
* ''scr.gfx.pad'' = размер отступов к скролл-барам и краям меню (число)
* ''scr.gfx.x'', ''scr.gfx.y'', ''scr.gfx.w'', ''scr.gfx.h'' = координаты, ширина и высота окна изображений. Области в которой располагается картинка сцены. Интерпретация зависит от режима расположения (числа)
* ''win.gfx.h'' - синоним ''scr.gfx.h'' (для совместимости)
* ''scr.gfx.mode'' = режим расположения (строка ''fixed'', ''embedded'' или ''float''). Задает режим изображения. ''embedded'' -- картинка является частью содержимого главного окна, параметры ''scr.gfx.x'', ''scr.gfx.y'', ''scr.gfx.w'' игнорируются. ''float'' -- картинка расположена по указанным координатам (scr.gfx.x, scr.gfx.y) и масштабируется к размеру ''scr.gfx.w'' x ''scr.gfx.h'' если превышает его. ''fixed'' -- картинка является частью сцены как в режиме embedded, но не скроллируется вместе с текстом а расположена непосредственно над ним.
* ''win.x'', ''win.y'', ''win.w'', ''win.h'' = координаты, ширина и высота главного окна. Области в которой располагается описание сцены (числа)
* ''win.fnt.name'' = путь к файлу-шрифту (строка)
* ''win.fnt.size'' = размер шрифта главного окна (размер)
* ''win.fnt.height'' = междустрочный интервал как число с плавающей запятой (1.0 по умолчанию)
* ''win.gfx.up'', ''win.gfx.down'' = пути к файлам-изображениям скорллеров вверх/вниз для главного окна (строка)
* ''win.up.x'', ''win.up.y'', ''win.down.x'', ''win.down.y'' = координаты скроллеров (координата или -1)
* ''win.col.fg'' = цвет текста главного окна (цвет)
* ''win.col.link'' = цвет ссылок главного окна (цвет)
* ''win.col.alink'' = цвет активных ссылок главного окна (цвет)
* ''inv.x'', ''inv.y'', ''inv.w'', ''inv.h'' = координаты, высота и ширина области инвентаря. (числа)
* ''inv.mode'' = строка режима инвентаря (''horizontal'' или ''vertical''). В горизонтальном режиме инвентаря в одной строке могут быть несколько предметов. В вертикальном режиме, в каждой строке инвентаря содержится только один предмет. (число)
* ''inv.col.fg'' = цвет текста инвентаря (цвет)
* ''inv.col.link'' = цвет ссылок инвентаря (цвет)
* ''inv.col.alink'' = цвет активных ссылок инвентаря (цвет)
* ''inv.fnt.name'' = путь к файлу-шрифту инвентаря (строка)
* ''inv.fnt.size'' = размер шрифта инвентаря (размер)
* ''inv.fnt.height'' = междустрочный интервал как число с плавающей запятой (1.0 по умолчанию)
* ''inv.gfx.up'', ''inv.gfx.down'' = пути к файлам-изображениям скорллеров вверх/вниз для инвентаря (строка)
* ''inv.up.x'', ''inv.up.y'', ''inv.down.x'', ''inv.down.y'' = координаты скроллеров (координата или -1)
* ''menu.col.bg'' = фон меню (цвет)
* ''menu.col.fg'' = цвет текста меню (цвет)
* ''menu.col.link'' = цвет ссылок меню (цвет)
* ''menu.col.alink'' = цвет активных ссылок меню (цвет)
* ''menu.col.alpha'' = прозрачность меню 0-255 (число)
* ''menu.col.border'' = цвет бордюра меню (цвет)
* ''menu.bw'' = толщина бордюра меню (число)
* ''menu.fnt.name'' = путь к файлу-шрифту меню (строка)
* ''menu.fnt.size'' = размер шрифта меню (размер)
* ''menu.fnt.height'' = междустрочный интервал как число с плавающей запятой (1.0 по умолчанию)
* ''menu.gfx.button'' = путь к файлу изображению значка меню (строка)
* ''menu.button.x'', ''menu.button.y'' = координаты кнопки меню (числа)
* ''snd.click'' = путь к звуковому файлу щелчка (строка)
* ''include'' = имя темы (последний компонент в пути каталога) (строка)
Кроме того, заголовок темы может включать в себя комментарии с тегами. На данный момент существует только один тег: $Name:, содержащий UTF-8 строку с именем темы. Например:
<code lua>
<code ini>
; $Name:Новая тема$
; модификация темы book
include = book
scr.gfx.h = 500
</code>
Интерпретатор выполняет поиск тем в каталоге themes. Unix версия кроме этого каталога, просматривает также каталог ~/.instead/themes/
Windows версия (>=0.8.7): Documents and Settings/USER/Local Settings/Application Data/instead/themes
<WRAP center round info>
Интерпретатор выполняет поиск тем в каталоге ''themes''. Unix версия кроме этого каталога, просматривает также каталог ''~/.instead/themes/''
Windows версия (>=0.8.7): ''Documents and Settings/USER/Local Settings/Application Data/instead/themes''
</WRAP>

BIN
mingw32ce.tar.gz Normal file

Binary file not shown.