Темы для sdl-instead
Графический интерпретатор поддерживает механизм тем. Тема представляет из себя каталог, с файлом 'theme.ini' внутри.
Тема, которая является минимально необходимой -- это тема 'default'. Эта тема всегда загружается первой. Все остальные темы наследуются от неё и могут частично или полностью заменять её параметры. Выбор темы осуществляется пользователем через меню настроек, однако конкретная игра может содержать собственную тему и таким образом влиять на свой внешний вид. В этом случае в каталоге с игрой должен находиться свой файл 'theme.ini'. Тем не менее, пользователь свободен отключить данный механизм, при этом интерпретатор будет предупреждать о нарушении творческого замысла автора игры.
Синтаксис 'theme.ini' очень прост.
<параметр> = <значение>
или
; комментарий
Значения могут быть следующих типов: строка, цвет, число.
Цвет задаётся в форме #rgb, где r g и b компоненты цвета в шестнадцатеричном виде. Кроме того, некоторые основные цвета распознаются по своим именам. Например: yellowgreen, или violet.
Параметры могут принимать значения:
- scr.w = ширина игрового пространства в пикселях (число)
- scr.h = высота игрового пространства в пикселях (число)
- scr.col.bg = цвет фона
- scr.col.brd = цвет бордюра, если он есть (по умолчанию чёрный)
- scr.gfx.scalable = [0|1|2] (0 - не масштабируемая тема, 1 - масштабируемая, 2 - масштабируемая без сглаживания), начиная с версии 2.2.0 доступны дополнительно [4|5|6]: 4 - полностью не масштабируемая (с не масштабируемыми шрифтами), 5 - масштабируемая, с не масштабируемыми шрифтами, 6 - масштабируемая без сглаживания, с не масштабируемыми шрифтами
- scr.scale_aware = [0|1|2] (поддержка адаптивных тем: 0 - виртуальное разрешение, 1 - виртуальное разрешение с реальными пропорциями, 2 - реальное разрешение)
- scr.dpi = [dpi|dpi1-dpi2] (задать DPI для которого создана тема, по умолчанию 96)
- scr.gfx.scale = масштаб (задать масштабирование графики, 1.0 по умолчанию)
- scr.gfx.bg = путь к картинке фонового изображения (строка)
- scr.gfx.cursor.x = x координата центра курсора (число)
- scr.gfx.cursor.y = y координата центра курсора (число)
- scr.gfx.cursor.normal = путь к картинке-курсору (строка)
- scr.gfx.cursor.use = путь к картинке-курсору режима использования (строка)
- scr.gfx.use = путь к картинке-индикатору режима использования (строка)
- scr.gfx.pad = размер отступов к скролл-барам и краям меню (число)
- scr.gfx.x, scr.gfx.y, scr.gfx.w, scr.gfx.h = координаты, ширина и высота окна изображений. Области, в которой располагается картинка сцены. Интерпретация зависит от режима расположения (числа)
- win.gfx.h - синоним scr.gfx.h (для совместимости)
- scr.gfx.icon = пусть к файлу-иконке игры (ОС зависимая опция, может работать некорректно в некоторых случаях)
- 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, но не скроллируется вместе с текстом, а расположена непосредственно над ним. Доступны модификации режима float с модификаторами 'left/right/center/middle/bottom/top', указывающими как именно размещать картинку в области scr.gfx. Например: float-top-left;
- win.scroll.mode = [0|1|2|3] режим прокрутки области сцены. 0 - нет автоматической прокрутки, 1 - прокрутка на изменение в тексте, 2 прокрутка на изменение, только если изменение не видно, 3 - всегда в конец;
- win.x, win.y, win.w, win.h = координаты, ширина и высота главного окна. Области, в которой располагается описание сцены (числа)
- win.fnt.name = путь к файлу-шрифту (строка). Здесь и далее, шрифт может содержать описание всех начертаний, например: {sans,sans-b,sans-i,sans-bi}.ttf (заданы начертания для regular, bold, italic и bold-italic). Вы можете опускать какие-то начертания, и движок сам сгенерирует их на основе обычного начертания, например: {sans,,sans-i}.ttf (заданы только regular и italic);
- win.align = center/left/right/justify (выравнивание текста в окне сцены);
- 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 = цвет активных ссылок главного окна (цвет)
- win.ways.mode = top/bottom (задать расположение списка переходов, по умолчанию top -- сверху сцены)
- inv.x, inv.y, inv.w, inv.h = координаты, высота и ширина области инвентаря. (числа)
- inv.mode = строка режима инвентаря (horizontal или vertical). В горизонтальном режиме инвентаря в одной строке могут быть несколько предметов. В вертикальном режиме, в каждой строке инвентаря содержится только один предмет. Существуют модификации (-left/right/center). Вы можете задать режим disabled если в вашей игре не нужен инвентарь;
- 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 строку с именем темы. Например:
; $Name:Новая тема$
; модификация темы book
include = book ; -- использовать тему Книга
scr.gfx.h = 500 ; -- заменить в ней один параметрИнтерпретатор выполняет поиск тем в каталоге themes. Unix-версия, кроме этого каталога, просматривает также каталог ~/.instead/themes/. Windows-версия: %LOCALAPPDATA%\instead\themes (ниже Vista: Documents and Settings\USER\Local Settings\Application Data\instead\themes).
Кроме этого, новые версии INSTEAD поддерживают механизм множественных тем в одной игре. Давая возможность игроку через стандартное меню INSTEAD выбрать подходящее оформление, из предусмотренных автором игры. Для этого, все темы должны располагаться в игре в подкаталоге themes. В свою очередь, каждая тема -- это подкаталог в каталоге themes. В каждом таком подкаталоге должен находится свой файл theme.ini и ресурсы темы (картинки, шрифты, звуки). При этом обязательно наличие темы-каталога themes/default - эта тема будет загружена по умолчанию. Формат файлов theme.ini мы только что рассмотрели. Однако, пути к файлам с ресурсами в theme.ini пишутся не относительно корневого каталога игры, а относительно текущего каталога темы. Это означает, что обычно они содержат только имя самого файла, без пути к каталогу. Например:
mygame/
themes/
default/
theme.ini
bg.png
widescreen/
theme.ini
main3.luatheme.ini
scr.gfx.bg = bg.png
; ...При этом, все игровые темы наследуются от темы themes/default. Поддерживается механизм include. При этом, INSTEAD сначала пытается найти одноименную тему игры, и если такой темы не находится, будет загружена тема из стандартных тем INSTEAD (если она существует). Далее, в theme.ini можно изменять только те параметры, которые требуют изменения.