Новости В Of Ash and Steel начался закрытый плейтест
  • 6.436
  • 11
Разработчики "Русской Готики" объявили о старте закрытого плейтеста. Если вы оставляли заявку на участие, не забудьте проверить электронную почту или посмотреть свою библиотеку - возможно игра уже...
С Днём России!
  • 6.585
  • 6
Дорогие друзья! Поздравляю вас с Днём России! Этот праздник напоминает нам о богатой истории и культуре нашей страны, о её величии и непоколебимом духе народа! Желаю вам крепкого здоровья...
Новости Анонсирован Atomic Heart II
Новости Анонсирован ремастер Final Fantasy Tactics
  • 4.578
  • 2
Культовая пошаговая тактическая RPG от Square Enix получит второе дыхание. На проходящей выставке State of Play, где анонсируются игры для Play Station, состоялся анонс ремастера Final Fantasy...
Поддержка TTF и OTF шрифтов.

Поддержка TTF и OTF шрифтов. 1.1

Нет прав доступа на загрузку
Этот патч добавляет совместимость Нового Баланса с отличным модом что позволяет использовать любые в

Хедин

Живая легенда
Пользователь VIP
Модостроитель
Почётный пользователь
Участник форума
Регистрация
10 Июл 2013
Сообщения
6.877
Реакции
9.397
Баллы
816
Лучшие ответы
130
#71
@Estel Randir, нужно что бы Готика и моды его использовали. Нет смысла указывать шрифт, который игра не использует.
 

Estel Randir

Постоялец
Участник форума
Регистрация
24 Июн 2022
Сообщения
92
Реакции
19
Баллы
18
Лучшие ответы
0
#72
@Estel Randir, нужно что бы Готика и моды его использовали. Нет смысла указывать шрифт, который игра не использует.
Да, я понимаю. Я действительно хочу добавить в «Готику» что-то новое, помимо простого мода на замену. Но, думаю, мне нужно уметь писать скрипты. Другие люди создавали новые шрифты, которые использовались в движке «Готики» (задолго до мода TTF), но, по-моему, это требовало встраивания их в игру. У меня просто нет времени изучать современные скрипты и т.д. Возможно, через несколько лет я смогу.
 

Estel Randir

Постоялец
Участник форума
Регистрация
24 Июн 2022
Сообщения
92
Реакции
19
Баллы
18
Лучшие ответы
0
#73
@Хедин,

Я сделал это, без скриптов! Я использовал неправильный файл данных из /Gothic 2/Data. Я создал хак. Зачем? Чтобы проверить, смогу ли я это сделать. Возможно, я вас утомляю всем этим. Но мне это интересно.
1) Я скопировал файл \Gothic 2\Data\Textures.vdf​
2) Я переименовал его в Custom_Fonts.vdf и поместил в \Gothic 2\Data\​
3) Внутри Custom_Fonts.vdf я удалил все файлы и папки, кроме: \_work\Data\Textures\Compiled\FONT_DEFAULT-C.TEX и \_work\Data\Textures\Fonts\FONT_DEFAULT.TGA​
4) Переименовал FONT_DEFAULT-C.TEX в FONT_HEDIN_XP_BAR-C.TEX​
5) Переименовал FONT_DEFAULT.TGA в FONT_HEDIN_XP_BAR.TGA​
6) Сохранил изменения в Custom_Fonts.vdf​
7) В файле TTF.ini я добавил:​
FONT_HEDIN_XP_BAR.TGA = Aptos_Plain.ttf: size=14:R=205:G=186:B=156:A=255​
8) В Gothic.ini я изменил параметр шрифта UNION_XP_BAR на:​
xpTextFont=FONT_HEDIN_XP_BAR.TGA​
Работает. Это хак. Мне нужен был только шрифт-заглушка, чтобы я мог заменить его в TTF.ini. Мне не нужно было создавать новый шрифт, чтобы заменить его в TTF.ini.

Этот хак даёт моду XP_Bar (или любому моду с параметром TextFont=) возможность использовать собственный независимый шрифт. Шрифт можно изменить, не затрагивая другие моды или элементы пользовательского интерфейса. Именно поэтому я и спрашивал о том, что все ваши моды, выводящие текст на экран, могут иметь собственный параметр TextFont=. Используя этот хак, я мог бы буквально сделать так, чтобы каждый мод имел свой уникальный идентификатор в TTf.ini.
 
Последнее редактирование:

Хедин

Живая легенда
Пользователь VIP
Модостроитель
Почётный пользователь
Участник форума
Регистрация
10 Июл 2013
Сообщения
6.877
Реакции
9.397
Баллы
816
Лучшие ответы
130
#74
@Estel Randir, там все проще
- в gothic.ini прописать
Код:
xpTextFont=FONT_XP_BAR_TEST.TGA
- в TTF.ini
Код:
FONT_XP_BAR_TEST.TGA = HEDIN_HOTBAR.ttf:Size=20:R=255:G=255:B=255:A=255
- в \_work\fonts поместить нужный TTF шрифт с именем G2_HEDIN_HOTBAR.ttf и G1_HEDIN_HOTBAR.ttf

20.jpg

В принципе то идея неплохая, но делать в каждом плагине такую возможность честно говоря лень, да еще шрифты подбирать. Не все TTF шрифты нормально работают с TTF.dll
 

Estel Randir

Постоялец
Участник форума
Регистрация
24 Июн 2022
Сообщения
92
Реакции
19
Баллы
18
Лучшие ответы
0
#75
@Estel Randir, там все проще
- в gothic.ini прописать
Код:
xpTextFont=FONT_XP_BAR_TEST.TGA
- в TTF.ini
Код:
FONT_XP_BAR_TEST.TGA = HEDIN_HOTBAR.ttf:Size=20:R=255:G=255:B=255:A=255
- в \_work\fonts поместить нужный TTF шрифт с именем G2_HEDIN_HOTBAR.ttf и G1_HEDIN_HOTBAR.ttf

Посмотреть вложение 157106

В принципе то идея неплохая, но делать в каждом плагине такую возможность честно говоря лень, да еще шрифты подбирать. Не все TTF шрифты нормально работают с TTF.dll
Ах, не нужен VDF-файл. Просто вставьте его напрямую в \_work\fonts... Спасибо!

Используя ваш метод, я «пропустил» один шаг. Я не использовал «заполнитель имени». В Gothic 2:

1) Выберите шрифт True Type и назовите его G2_FONT_XP_BAR_TEST.ttf​
2) Поместите его в \_work\fonts\​
3) В моде XP_Bar используйте xpTextFont=FONT_XP_BAR_TEST.TGA​
4) В TTF.ini напишите:
Код:
FONT_XP_BAR_TEST.TGA = FONT_XP_BAR_TEST.ttf:Size=20:R=205:G=186:B=156:A=255

Это тоже работает. Так вам не придётся использовать два имени (если вы этого не хотите). Не обязательно использовать «имя-заполнитель», а затем другое имя для шрифта True Type, если вы добавляете свой шрифт в мод.

Согласен, добавление параметра шрифта в мод — это дополнительная работа. Преимущество в том, что можно сделать так, чтобы экранный текст из модов имел размер/тип шрифта, отличный от системных шрифтов Gothic (диалоги, игровые меню и т. д.). Сейчас они смешаны — невозможно изменить размер шрифта меню или диалогов, не изменив при этом шрифт в модах. Если бы у всех модов, выводящих текст на экран, был параметр шрифта, то, например, весь текст из модов можно было бы сделать размером 12, а системные шрифты — 16, и наоборот.

Я люблю классические RPG, например, Gothic. Но я избалован хорошими MMORPG со «скином» пользовательского интерфейса. Почти каждый элемент пользовательского интерфейса можно легко перемещать, масштабировать, менять размер и тип шрифта, настраивать прозрачность и т.д. Если бы я умел хорошо программировать, я бы, например, создал современный скин для Готики, в который можно было бы просто «вставлять» моды. Моды унаследовали бы функции скина. Кто-то работал над чем-то подобным, но прекратил это в 2020 году.
 
Последнее редактирование:

CJIabuk

Житель города
Участник форума
Регистрация
14 Окт 2022
Сообщения
122
Реакции
44
Баллы
73
Лучшие ответы
2
#76
@Blackmail01 приветствую! Как мне показалось, использование патча и ttf шрифтов увеличивает межстрочный интервал в некоторых местах (описание предмета при просмотре его параметров из инвентаря, отображение в верхнем левом углу; фпс, день, ускорение и т.д.). Шрифты в формате vdf этого не делают. Вот и вопрос: можно ли ввести настройку интервала между строк? Или это будет задевать остальные места использования ttf шрифта?
 
Автор
Автор
Blackmail01

Blackmail01

Гвардеец
Команда форума
Редактор раздела
Участник форума
Регистрация
27 Дек 2019
Сообщения
1.386
Реакции
1.365
Баллы
261
Лучшие ответы
76
#77
@CJIabuk, Есть такое дело. Стоит добавить множитель межстрочного интервала.
@Хедин добавь пожалуйста в библиотеку вместе со своими правками, а я тут обновлю.:flower:
Чтобы всё работало хорошо из коробки с твоими тоже плагинами.
C:
float g_lineSpacing = 1.0f;
C:
static void ReadConfigurationFile()
{
    char cfgPath[MAX_PATH];
    GetModuleFileNameA(GetModuleHandleA(nullptr), cfgPath, sizeof(cfgPath));
    PathRemoveFileSpecA(cfgPath);
    strcat_s(cfgPath, "\\TTF.ini");

    FILE* f;
    errno_t err = fopen_s(&f, cfgPath, "r");
    if(err == 0)
    {
        std::string currentSector = "none";

        char readedLine[1024];
        while(fgets(readedLine, sizeof(readedLine), f) != nullptr)
        {
            size_t len = strlen(readedLine);
            if(len > 0)
            {
                if(readedLine[len - 1] == '\n' || readedLine[len - 1] == '\r')
                    len -= 1;
                if(len > 0)
                {
                    if(readedLine[len - 1] == '\n' || readedLine[len - 1] == '\r')
                        len -= 1;
                }
            }
            if(len == 0)
                continue;

            if(readedLine[0] == '[' && readedLine[len - 1] == ']')
            {
                currentSector = std::string(readedLine + 1, len - 2);
                std::transform(currentSector.begin(), currentSector.end(), currentSector.begin(), toupper);
            }
            else if(readedLine[0] != ';' && readedLine[0] != '/')
            {
                std::size_t eqpos;
                std::string rLine = std::string(readedLine, len);
                std::transform(rLine.begin(), rLine.end(), rLine.begin(), toupper);
                if((eqpos = rLine.find("=")) != std::string::npos)
                {
                    std::string lhLine = rLine.substr(0, eqpos);
                    std::string rhLine = rLine.substr(eqpos + 1);
                    lhLine.erase(lhLine.find_last_not_of(' ') + 1);
                    lhLine.erase(0, lhLine.find_first_not_of(' '));
                    rhLine.erase(rhLine.find_last_not_of(' ') + 1);
                    rhLine.erase(0, rhLine.find_first_not_of(' '));
                    if(currentSector == "CONFIGURATION")
                    {
                        if(lhLine == "SCALEFONTS")
                            g_useScaling = (rhLine == "TRUE" || rhLine == "1");
                        else if(lhLine == "CODEPAGE")
                        {
                            if(rhLine == "WINDOWS-1250" || rhLine == "WINDOWS1250" || rhLine == "WINDOWS 1250" || rhLine == "1250")
                                g_useEncoding = 1250;
                            else if(rhLine == "WINDOWS-1251" || rhLine == "WINDOWS1251" || rhLine == "WINDOWS 1251" || rhLine == "1251")
                                g_useEncoding = 1251;
                            else if(rhLine == "WINDOWS-1252" || rhLine == "WINDOWS1252" || rhLine == "WINDOWS 1252" || rhLine == "1252")
                                g_useEncoding = 1252;
                            else if(rhLine == "WINDOWS-1253" || rhLine == "WINDOWS1253" || rhLine == "WINDOWS 1253" || rhLine == "1253")
                                g_useEncoding = 1253;
                            else if(rhLine == "WINDOWS-1254" || rhLine == "WINDOWS1254" || rhLine == "WINDOWS 1254" || rhLine == "1254")
                                g_useEncoding = 1254;
                            else if(rhLine == "WINDOWS-1255" || rhLine == "WINDOWS1255" || rhLine == "WINDOWS 1255" || rhLine == "1255")
                                g_useEncoding = 1255;
                            else if(rhLine == "WINDOWS-1256" || rhLine == "WINDOWS1256" || rhLine == "WINDOWS 1256" || rhLine == "1256")
                                g_useEncoding = 1256;
                            else if(rhLine == "WINDOWS-1257" || rhLine == "WINDOWS1257" || rhLine == "WINDOWS 1257" || rhLine == "1257")
                                g_useEncoding = 1257;
                            else if(rhLine == "WINDOWS-1258" || rhLine == "WINDOWS1258" || rhLine == "WINDOWS 1258" || rhLine == "1258")
                                g_useEncoding = 1258;
                            else
                                g_useEncoding = 0;
                        }
                        // Добавлено: Обработка настройки межстрочного интервала
                        else if(lhLine == "LINESPACING")
                        {
                            // Парсим значение межстрочного интервала из конфига
                            try { g_lineSpacing = std::stof(rhLine); }
                            catch(const std::exception&) { g_lineSpacing = 1.0f; } // Значение по умолчанию при ошибке
                        }
                    }
                    else if(currentSector == "FONTS")
                        g_fontsWrapper.emplace(lhLine, rhLine);
                }
            }
        }
        fclose(f);
    }
}
C:
int __fastcall G1_zCFont_GetFontY(DWORD zCFont)
{
    int baseHeight = *reinterpret_cast<int*>(zCFont + 0x24) - *reinterpret_cast<int*>(zCFont + 0x2C);
    return static_cast<int>(baseHeight * g_lineSpacing);
}
C:
int __fastcall G2_zCFont_GetFontY(DWORD zCFont)
{
    int baseHeight = *reinterpret_cast<int*>(zCFont + 0x24) - *reinterpret_cast<int*>(zCFont + 0x2C);
    return static_cast<int>(baseHeight * g_lineSpacing);
}
[CONFIGURATION]
LINESPACING=1.0
 

Санчес

Гвардеец
Участник форума
Регистрация
9 Май 2021
Сообщения
1.493
Реакции
475
Баллы
162
Лучшие ответы
24
#78
@Blackmail01, очень приятно, когда авторы модов сотрудничают между собой, а не устраивают грызню как в теме о GTR..
 

Хедин

Живая легенда
Пользователь VIP
Модостроитель
Почётный пользователь
Участник форума
Регистрация
10 Июл 2013
Сообщения
6.877
Реакции
9.397
Баллы
816
Лучшие ответы
130
#79
@Blackmail01, плохая идея делать через FontY, потом подумаю
 
Сверху Снизу