FantomICW
Понедельник, 22.12.2014, 17:34 | Сообщение # 1
Проект Смерти Вопреки
Статус :
Опытный :
Сообщений :
2259
Награды :
8
Регистрация :
06.01.2013
Список шрифтов для UI
Платформа: Сталкер Зов Припяти 1.6.02 Автор: FantomICW Введение Всем привет. Пожалуй, есть вопросы по модостроению, которые мучили меня месяцами. Один из них - список доступных для использования игровых шрифтов. Некоторые ресурсы в гугле предлагают открыть файл configs/fonts.ltx , но я так и не понял, каким образом эта вещь читается движком: названия "фонтов" не совпадают с тем, что используются в интерфейсе. Итого, данный вопрос будет пока что раскрыт наполовину. Тем не менее, благодаря исходникам движка 1.6.02, мне удалось докопаться до того самого места, где "регистрируются" реально работающие шрифты! Предлагаю ознакомиться с этим небольшим справочником ;) Справочная информация
Собственно, "регистрация" шрифтов проходит в файле
UIXmlInit.cpp . Строки
29-43 содержат определение переменных для
большой части названий шрифтов (чуть ниже мы увидим, как эти переменные используются):
Код
#define ARIAL_FONT_NAME "arial" #define MEDIUM_FONT_NAME "medium" #define SMALL_FONT_NAME "small" #define GRAFFITI19_FONT_NAME "graffiti19" #define GRAFFITI22_FONT_NAME "graffiti22" #define GRAFFITI32_FONT_NAME "graffiti32" #define GRAFFITI50_FONT_NAME "graffiti50" #define LETTERICA16_FONT_NAME "letterica16" #define LETTERICA18_FONT_NAME "letterica18" #define LETTERICA25_FONT_NAME "letterica25" #define DI_FONT_NAME "di"
Структура:
Код
#define ПЕРЕМЕННАЯ "название"
Сама "регистрация" проходит в этом же файле, в функции
InitFont :
Код
bool CUIXmlInit::InitFont(CUIXml &xml_doc, LPCSTR path, int index, u32 &color, CGameFont *&pFnt) { color = GetColor (xml_doc, path, index, 0xff); LPCSTR font_name = xml_doc.ReadAttrib(path, index, "font", NULL); if(!font_name) { pFnt = NULL; return false; }else { if(!xr_strcmp(font_name, GRAFFITI19_FONT_NAME)) { pFnt = UI().Font().pFontGraffiti19Russian; } else if(!xr_strcmp(font_name, GRAFFITI22_FONT_NAME)) { pFnt = UI().Font().pFontGraffiti22Russian; } else if(!xr_strcmp(font_name, GRAFFITI32_FONT_NAME)) { pFnt = UI().Font().pFontGraffiti32Russian; } else if(!xr_strcmp(font_name, GRAFFITI50_FONT_NAME)) { pFnt = UI().Font().pFontGraffiti50Russian; } else if(!xr_strcmp(font_name, "arial_14")) { pFnt = UI().Font().pFontArial14; } else if(!xr_strcmp(font_name, MEDIUM_FONT_NAME)) { pFnt = UI().Font().pFontMedium; } else if(!xr_strcmp(font_name, SMALL_FONT_NAME)) { pFnt = UI().Font().pFontStat; } else if(!xr_strcmp(font_name, LETTERICA16_FONT_NAME)) { pFnt = UI().Font().pFontLetterica16Russian; } else if(!xr_strcmp(font_name, LETTERICA18_FONT_NAME)) { pFnt = UI().Font().pFontLetterica18Russian; } else if(!xr_strcmp(font_name, LETTERICA25_FONT_NAME)) { pFnt = UI().Font().pFontLetterica25; } else if(!xr_strcmp(font_name, DI_FONT_NAME)) { pFnt = UI().Font().pFontDI; }else { R_ASSERT3(0,"unknown font",font_name); pFnt = NULL; } } return true; }
Что можно вынести интересного:
- знакомые переменные
-
arial_14 не использует переменную, как другие шрифты
- есть функция
R_ASSERT :
Код
R_ASSERT3(0,"unknown font",font_name); pFnt = NULL;
Код
"arial_14" "medium" "small" "graffiti19" "graffiti22" "graffiti32" "graffiti50" "letterica16" "letterica18" "letterica25" "di"
Надеюсь, информация пригодится! Спасибо за внимание и удачи!
Понедельник, 22.12.2014, 17:34
Статус :
Сообщений :
666
Регистрация :
06.01.2013
strchi
Вторник, 08.09.2015, 08:46 | Сообщение # 2
Статус :
Опытный :
Сообщений :
2467
Награды :
13
Регистрация :
05.10.2012
Узнать бы побольше о создании новых шрифтов, но как я понял- работа с шрифтами геморройная?
Вторник, 08.09.2015, 08:46
Статус :
Сообщений :
666
Регистрация :
05.10.2012
FantomICW
Понедельник, 14.09.2015, 12:44 | Сообщение # 3
Проект Смерти Вопреки
Статус :
Опытный :
Сообщений :
2259
Награды :
8
Регистрация :
06.01.2013
Понедельник, 14.09.2015, 12:44
Статус :
Сообщений :
666
Регистрация :
06.01.2013