Welcome to U.A.C. [O.S.A.]
login / register 
Status: Guest
Архивы форума | iddqd.ru
Wolf 3D
ПравилаПравила ПоискПоиск
18+
[Руководство]Все о шрифтах. Пред.  1, 2, 3, 4, 5  След.
   Список разделов - Местечко мапперов и моддеров - [Руководство]Все о шрифтах.Ответить
АвторСообщение
VladGuardian
= Commissar =
Next rank: - UAC Commissar - after 263 points
5537

Doom Rate: 1.28

Posts quality: +1934
Ссылка на пост №61 Отправлено: 15.10.20 17:53:06
Shadowman пишет:
У кого-нибудь остался генератор шрифтов от Нила?
Вообще-то такие вещи надо на иддкд держать на постоянной основе.

Я нашел только исходники на гите.
Датируются 2014-м годом. (25.08.2014)
У кого есть Визуал Студио (для C++), тот сможет скомпилировать.
https://github.com/Dethernal/NilDoomFontGen (кнопочка Code -> Download ZIP)

У меня на кампуктере только VS C#, скомпилировать не могу.
4 10 23
theleo_ua
= Colonel =
Next rank: - Commissar - after 96 points
4794

Doom Rate: 1.8

Posts quality: +1032
Ссылка на пост №62 Отправлено: 15.10.20 19:08:45
Shadowman пишет:
У кого-нибудь остался генератор шрифтов от Нила?
Вообще-то такие вещи надо на иддкд держать на постоянной основе.


оно и есть на постоянной основе:

https://i.iddqd.ru/viewtopic.php?p=61927#61927

находишь там:

Скрытый текст:


Про шрифт CONFONT от theleo_ua:
Скрытый текст:

Шаг 1: качаем все необходимые файлы одним архивом: https://drive.google.com/file/d/0BygbyP4_qEiTOUI1QWhBbkxpYm8/view?usp=sharing

3 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
8389

Doom Rate: 2.08

Posts quality: +1986
Ссылка на пост №63 Отправлено: 15.10.20 19:56:19
theleo_ua пишет:
оно и есть на постоянной основе:

Спасибо, но там в архиве обычный думфонтген, а я искал прогу от Нила - она сразу создает шрифт в формате .fon2 без обращения к imagetool.
1 7 2
theleo_ua
= Colonel =
Next rank: - Commissar - after 96 points
4794

Doom Rate: 1.8

Posts quality: +1032
Ссылка на пост №64 Отправлено: 15.10.20 20:03:01
Shadowman пишет:
Спасибо, но там в архиве обычный думфонтген, а я искал прогу от Нила - она сразу создает шрифт в формате .fon2 без обращения к imagetool.


понял

Так почему в гздуме для тебя не вариант юзать language.csv и не париться с ANSI проблемами?
3 1
VVL
= UAC Gunner =
Next rank: - Corporal - after 3 points
77

Doom Rate: 1.83

Posts quality: +18
Ссылка на пост №65 Отправлено: 15.10.20 20:19:09
В оригинальной теме Nil'a (которую почему то потёрли) была другая ссылка, которая работает до сих пор: http://yadi.sk/d/UKIF1uK22T30I

Рейтинг сообщения: +2, отметил(и): Shadowman, VladGuardian
Shadowman
UAC General
Next rank: Unavailable after 0 points
8389

Doom Rate: 2.08

Posts quality: +1986
Ссылка на пост №66 Отправлено: 15.10.20 20:38:11
VVL
Спасибо!
Хотя Нил помнится дорабатывал прогу, по ссылке самый первый вариант. Он в вин10 как то криво работает ((
theleo_ua пишет:
почему в гздуме для тебя не вариант юзать language.csv

Может, потому что я не знаю, как и чем готовить language.csv?
1 7 2
VVL
= UAC Gunner =
Next rank: - Corporal - after 3 points
77

Doom Rate: 1.83

Posts quality: +18
Ссылка на пост №67 Отправлено: 15.10.20 20:57:09
Вот нашёл более новую версию, попробуй: http://www.mediafire.com/file/e05ddv9brd1yztw/Release_%2528Russian%2529.7z

Рейтинг сообщения: +1, отметил(и): Shadowman
Shadowman
UAC General
Next rank: Unavailable after 0 points
8389

Doom Rate: 2.08

Posts quality: +1986
Ссылка на пост №68 Отправлено: 16.10.20 00:01:33
VVL
Благодарю, это та самая версия, которую я использовал для создания шрифтов. Непонятно только, где там в шрифте указано, что он в кодировке ANSI или уникоде, т.к. для русского надо выбрать Russian_Charset в опции кодовой страницы. А в какой она кодировке хз.
1 7 2
theleo_ua
= Colonel =
Next rank: - Commissar - after 96 points
4794

Doom Rate: 1.8

Posts quality: +1032
Ссылка на пост №69 Отправлено: 16.10.20 19:47:44
Shadowman пишет:
Может, потому что я не знаю, как и чем готовить language.csv?


если проблема в этом, то легко решается, рассказываю механизм (сам так делаю сейчас):

1) создаешь файл LANGUAGE в своем моде

2) пишешь туда следующее:

Скрытый текст:


default,Identifier,ru
english test text ,STRING_NAME,русский тестовый текст



важно: этот файл надо писать в юникоде

3) если надо заюзать эту строку в декорейте (в зскрипте, если не ошибаюсь, логика та же, но пока не пробовал), то юзается она так:

Скрытый текст:


Tag "$STRING_NAME"



или так

Скрытый текст:


TNT1 A 0 A_Log("$STRING_NAME")



т.е. ставишь символ доллара в начало строки, при условии, что строку все равно в кавычки берешь (доллар ставится после первой кавычки)

4) если надо заюзать эту строку в ACS, то делаешь вот так:

Скрытый текст:


printbold(l:"STRING_NAME");



в ACS не нужно символ доллара ставить, но нужно вместо s: писать l: , иначе вместо текста напишется имя переменной


5) Небольшой лайфхак на случай, если сами тексты в файл LANGUAGE тебе удобнее набирать в ANSI режиме:

Скрытый текст:


1) рядом с файлом LANGUAGE создаешь файл LANG_ANSI

2) качаешь прогу iconv.exe

3) рядом с фалом LANGUAGE создаешь батник UTF8_LANGUAGE.BAT с текстом:
"путь\iconv.exe" -f CP1251 -t UTF-8 LANG_ANSI>LANGUAGE

4) каждый раз, когда хочешь добавлять новые строки (или редактировать старые), редактируешь файл LANG_ANSI, сохраняешь его и запускаешь батник (он тебе сделает из LANG_ANSI юникодный файл LANGUAGE )



При такой схеме, какой язык юзер выберет в интерфейсе гздума, на таком и будут отображаться эти строки

Пробуй на тестовом моде и пиши результат

Рейтинг сообщения: +2, отметил(и): Shadowman, VladGuardian
3 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
8389

Doom Rate: 2.08

Posts quality: +1986
Ссылка на пост №70 Отправлено: 17.10.20 00:04:13
theleo_ua
Благодарю за подробную инструкцию, думаю, не только мне она пригодится здесь :)
Но остались еще вопросы:
1) Собственно сам шрифт все равно нужно делать отдельно - либо .fon2, либо как-то иначе. Т.к. высота букв, начертание и т.п. зависит от шрифта.
Соответственно в скрипте SetFont("Имя_шрифта"); все равно нужно.
2) В скриптах я вывожу тексты через HudMessage или HudMessageBold. Там тот же синтаксис? (вместо s: указываем l: и далее в кавычках имя строки
3) Что делать, если текст занимает несколько строк, и при этом технически он помечен как одна строка (номер строки в hudMessage)? Как тогда текст в language разбивать? тоже на строки со знаком переноса /n ?
4) Tag "$STRING_NAME" к какому месту декорэйта относится? Например, мне надо написать строку hitobituary или строку при подбирании вещи.

Рейтинг сообщения: +1, отметил(и): theleo_ua
1 7 2
theleo_ua
= Colonel =
Next rank: - Commissar - after 96 points
4794

Doom Rate: 1.8

Posts quality: +1032
Ссылка на пост №71 Отправлено: 17.10.20 06:28:58
Shadowman пишет:
Собственно сам шрифт все равно нужно делать отдельно - либо .fon2, либо как-то иначе.


Посмотри как это реализовано в актуальной версии gzdoom в файлах gzdoom.pk3 и game_support.pk3

Начни с game_support.pk3, папка filter\doom.id\fonts (открывать слейдом, так как шрифты там в lmp)

По такой же аналогии сделай свои шрифты (если я не ошибаюсь, логика там такая, что каждый символ юникода сохраняется отдельным файлом картинкой с именем XXXX.lmp, где XXXX - число в 16ричной системе, соответствующее позиции данного символа в юникодной таблице (например в ANSI это было бы число от 0 до 255 или от 00 до FF в 16ричной) )

Shadowman пишет:
Соответственно в скрипте SetFont("Имя_шрифта"); все равно нужно.


Да, если в скрипте тебе надо не шрифт по умолчанию, а переключать его сетфонтом, то юзается сетфонт и он должен работать. Достоинство моего метода в том, что все англ и рус строки:

1) записаны в одном файле
2) переключаются с англ на рус (и обратно) самим гздумом, ты об этом не паришься
3) записаны в юникоде и ты не паришься с нюансами кодировок, так как всегда юзаешь юникод и он всегда работает

Shadowman пишет:
2) В скриптах я вывожу тексты через HudMessage или HudMessageBold. Там тот же синтаксис? (вместо s: указываем l: и далее в кавычках имя строки


да. Пример результата через hudmessage:

рус
https://i.ibb.co/jL9fcSq/Screenshot-Hexen-20200122-153229.png
Скрытый текст:



англ
https://i.ibb.co/D4WV5jT/Screenshot-Hexen-20201017-061638.png
Скрытый текст:



Забыл сказать: если часть текста в твоей строке юзает строки из language.csv, а часть нет, то делается так:

temp_string = strparam(s:"блаблабла1", l:"строка из language 1", s:"блаблабла2", l:"строка из language 2", и т д)

а саму эту финальную строку ты выводишь потом через s:temp_string (либо через l:temp_string, но вроде через s, в общем попробуешь и так и так )

Shadowman пишет:
3) Что делать, если текст занимает несколько строк, и при этом технически он помечен как одна строка (номер строки в hudMessage)? Как тогда текст в language разбивать? тоже на строки со знаком переноса /n ?


/n должно сработать

в language.csv будет выглядеть примерно так:

english test 1 /n english test 2,OB_MULTISTRINGTEST,русский тест 1 /n русский тест 2

Shadowman пишет:
4) Tag "$STRING_NAME" к какому месту декорэйта относится? Например, мне надо написать строку hitobituary или строку при подбирании вещи.


Добавление доллара относится к любому месту в декорейте, где тебе надо работать со строками текста.

Tag это был пример параметра в декорейте (такое же проперти актора, как и hitobituary). Для hitobituary ты напишешь например так:

hitobituary "$OB_SHADOWMAN"

а в language.csv добавишь:

was translated and then killed by shadowman,OB_SHADOWMAN,был переведен и потом убит шадоуменом

Строка для подбирания вещи по такой же схеме

Рейтинг сообщения: +1, отметил(и): Shadowman
3 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
8389

Doom Rate: 2.08

Posts quality: +1986
Ссылка на пост №72 Отправлено: 17.10.20 16:44:20
theleo_ua
Благодарю, попробую.
Плюс твоего метода вижу в том, что не надо прописывать переменную языка и менять ее каждый раз в скриптах. А также легкость в создании рус-англ. сообщений для декорэйта.
Небольшой минус - нужно точно знать, сколько текста помещается на 1 строку и где ставить перенос. Когда текст пишется в скрипте карты, то легко поправить и протестить, не выходя из дум билдера. Когда во внешнем файле csv - надо выйти из карты, поменять текст в ксв, пересоздать pk3-архив, запустить карту.
У меня большинство текстов большие, занимают по 7-12 строк, так что их подгонка точно потребует немало времени.

Добавлено спустя 25 минут 44 секунды:

Попробовал на декорэйте.
Создал эксель файл, в нем записал (подряд, без учета ячеек эксель)
default,Identifier,ru
Тестируется английский текст,STRING_TEXT1,Тестируется русский текст

Сохранил файл как CSV UTF-8 (разделитель запятая)
В описание актора в декорэйте записал следующее:
     inventory.pickupmessage "$STRING_TEXT1"


Результат: при подборе актора пишется STRING_TEXT1 вместо соответствующей англ. или русской фразы.
Что я сделал не так?

Рейтинг сообщения: +1, отметил(и): theleo_ua
1 7 2
theleo_ua
= Colonel =
Next rank: - Commissar - after 96 points
4794

Doom Rate: 1.8

Posts quality: +1032
Ссылка на пост №73 Отправлено: 17.10.20 17:43:02
Shadowman пишет:
Небольшой минус - нужно точно знать, сколько текста помещается на 1 строку и где ставить перенос.


ты про то, что раньше в редакторе у тебя было несколько строк, а теперь одна, и ее неудобно читать (т.е. ты в редакторе не видишь, как она отображается у игрока на экране), и чтобы увидеть, что верхняя строка намного длиннее нижней, надо запустить карту на тестинг?

Shadowman пишет:
Результат: при подборе актора пишется STRING_TEXT1 вместо соответствующей англ. или русской фразы.
Что я сделал не так?


сделай тестовый мод (с минимумом файлов внутри мода) и выложи на гуглдиск, я гляну
3 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
8389

Doom Rate: 2.08

Posts quality: +1986
Ссылка на пост №74 Отправлено: 17.10.20 19:24:36
Да, вот пример
https://dropmefiles.com/yM7Zn
Запусти мап01 дум2, в консоли summon PCrystalVial, пусть зомби в начале выстрелят в игрока, потом подбери флян - будет некорректная надпись.

На этот раз я сперва создал файл language в блокноте, потом сохранил как csv, но при открытии эксель вместо русских букв показал кракозябры. Потому пересохранил еще раз из экселя в формат CSV UTF-8 (русскую фразу пришлось переписать).
Может, что то с форматами файла не то?


theleo_ua пишет:
раньше в редакторе у тебя было несколько строк, а теперь одна, и ее неудобно читать (т.е. ты в редакторе не видишь, как она отображается у игрока на экране), и чтобы увидеть, что верхняя строка намного длиннее нижней, надо запустить карту на тестинг?

Именно. Т.к. я по нескольку раз редактирую тексты, добиваясь лучшей стилистики и выразительности, а при замене слов или целых фраз надо править и отступы по строкам. В редакторе это все удобно делать. Понимаю, что csv-формат удобнее для переводчиков, которым не надо вычленять тексты из скриптов, но и после перевода текст все равно придется подгонять по длине строк, а значит, опять прогонять в игре по нескольку раз.
Вот для декорэйта language - штука безусловно удобная, т.к. там тексты короткие, используется стандартный консольный шрифт и достаточно записать лишь русс. и англ. фразы.

Рейтинг сообщения: +1, отметил(и): theleo_ua
1 7 2
N00b
Chief Petty Officer
Next rank: Chief Petty Officer after 18 points
922

Doom Rate: 2.15

Posts quality: +384
Ссылка на пост №75 Отправлено: 17.10.20 22:56:54
Прошу прощения, что влезаю в ваш разговор (причём ещё и не совсем по теме), но отступы можно расставлять и автоматически, например, с помощью "относительно недавно" появившейся функции SetHudWrapWidth, а в этом вашем ZScript есть и более мощный метод Font.BreakLines. Такие средства способны сильно уменьшить временные затраты на подобные вопросы.

Рейтинг сообщения: +1, отметил(и): theleo_ua
1 2
theleo_ua
= Colonel =
Next rank: - Commissar - after 96 points
4794

Doom Rate: 1.8

Posts quality: +1032
Ссылка на пост №76 Отправлено: 18.10.20 08:44:20
Shadowman пишет:
пусть зомби в начале выстрелят в игрока


на будущее - есть команда в консоли:
take health 2

Shadowman пишет:
Да, вот пример
https://dropmefiles.com/yM7Zn
Запусти мап01 дум2, в консоли summon PCrystalVial, пусть зомби в начале выстрелят в игрока, потом подбери флян - будет некорректная надпись.

На этот раз я сперва создал файл language в блокноте, потом сохранил как csv, но при открытии эксель вместо русских букв показал кракозябры. Потому пересохранил еще раз из экселя в формат CSV UTF-8 (русскую фразу пришлось переписать).
Может, что то с форматами файла не то?


лови рабочий вариант: https://u.pcloud.link/publink/show?code=XZAOHpXZYLTtwSeFoXLzN5CR6Sn7djExXwVk

На будущее:

1) Если понадобится создавать новые LANGUAGE файлы с нуля, то создавай файл не экселем, а копированием моего LANGUAGE из этого https://u.pcloud.link/publink/show?code=XZAOHpXZYLTtwSeFoXLzN5CR6Sn7djExXwVk пака

2) Если ты проделал пункт 1 (т.е. вместо создания своего, редактируешь мой), но все равно какая-то лабуда получилась - значит скорее всего тот софт, которым ты редактируешь, что-то делает не так. Решение простое: я тебе в пак (по ссылке выше) кинул еще и следующие файлы:

Скрытый текст:


_ANSI_TO_UTF8
UTF8_LANGUAGE.BAT
LANG_ANSI
LANGUAGE



Соответственно, для гарантированного 100%-ного результата, ты можешь открыть файл LANG_ANSI любым ANSI редактором (хоть фаром, хоть блокнотом, кодировку в нем юзай 1251), и пиши в нем весь текст в ANSI кодировке. Потом сохраняй этот файл и запускай UTF8_LANGUAGE.BAT, который создаст тебе файл LANGUAGE в корректной юникодной кодировке, которая работает

Но - как я понимаю, предыдущий абзац (тобишь пункт 2) не обязателен, т.е. это крайний вариант на случай, если твой софт не сможет сразу редактировать юникодный LANGUAGE как надо. Я юзаю пункт 2 только по причине, что мне так удобно (мне удобнее в ANSI редактировать)

N00b2015 пишет:
Прошу прощения, что влезаю в ваш разговор (причём ещё и не совсем по теме), но отступы можно расставлять и автоматически, например, с помощью "относительно недавно" появившейся функции SetHudWrapWidth, а в этом вашем ZScript есть и более мощный метод Font.BreakLines. Такие средства способны сильно уменьшить временные затраты на подобные вопросы.


на самом деле сообщение полезное, но я не совсем понял, как это поможет в том случае, который описал shadowman. Как я понимаю, его проблема не в отступах, а в количестве текста. Например, текст выглядит вот так:

бла бла бла1бла бла бла1бла бла бла1бла бла бла1бла бла бла1бла бла бла1бла бла бла1
бла бла бла2

а шадоумену понравится вот так:

бла бла бла1бла бла бла1бла бла бла1бла бла бла1бла
бла бла1бла бла бла1бла бла бла1 бла бла бла2

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

Рейтинг сообщения: +1, отметил(и): Shadowman
3 1
N00b
Chief Petty Officer
Next rank: Chief Petty Officer after 18 points
922

Doom Rate: 2.15

Posts quality: +384
Ссылка на пост №77 Отправлено: 18.10.20 09:37:07
Возможно, я неправильно выразил свою мысль, но Shadowman употребил слово "отступы".
Если "как понравится" — это просто фиксированная ширина, например, чтобы текст по горизонтали не вылезал с книжного листа или какой-нибудь области для сообщений, то эти методы — как раз то, что нужно. Например, для этих целей они используются в ещё разрабатываемой третьей части Blade of Agony (не могу сказать про первые две — просто не помню), и весьма успешно, на мой взгляд.

Рейтинг сообщения: +1, отметил(и): theleo_ua
1 2
theleo_ua
= Colonel =
Next rank: - Commissar - after 96 points
4794

Doom Rate: 1.8

Posts quality: +1032
Ссылка на пост №78 Отправлено: 18.10.20 09:50:30
N00b2015, что конкретно делает Font.BreakLines ?
3 1
N00b
Chief Petty Officer
Next rank: Chief Petty Officer after 18 points
922

Doom Rate: 2.15

Posts quality: +384
Ссылка на пост №79 Отправлено: 18.10.20 11:00:21
theleo_ua
Делит текст на строки так, чтобы длина каждой из строк, записанной выбранным шрифтом, не превышала заданную. Исходники GZDoom:
// Break long lines of text into multiple lines no longer than maxwidth pixels

Вот его реализация, интерфейс в C++, интерфейс в ZScript.

Рейтинг сообщения: +2, отметил(и): theleo_ua, JSO x
1 2
Shadowman
UAC General
Next rank: Unavailable after 0 points
8389

Doom Rate: 2.08

Posts quality: +1986
Ссылка на пост №80 Отправлено: 18.10.20 11:12:39
theleo_ua пишет:
лови рабочий вариант: https://u.pcloud.link/publink/show?code=XZAOHpXZYLTtwSeFoXLzN5CR6Sn7djExXwVk

Спасибо!
А все же интересно - какой же прогой ты создаешь LANGUAGe, что он корректно работает? Раз эксель и блокнот не дают 100% гарантии.
Кстати, в архиве language не распознается по типу файла - потому я могу его открыть и редактировать, только если открыть весь пк3 слэйдом, что не очень удобно. В BOA, как показывал N00b2015, использовался обычный эксель файл.
N00b2015 пишет:
Делит текст на строки так, чтобы длина каждой из строк, записанной выбранным шрифтом, не превышала заданную.

А как он будет делить слова фразы, если длина строки превысит заданную? Механически разделит слово и перенесет оставшуюся часть на следующую строку, не считаясь с правилами переноса?
В таком случае все равно надо вручную прогонять тексты в игре, чтобы понять, правильно ли перенесены слова или нет.
Если шрифт не моноширинный, то длина строки не равна количеству символов в строке, т.к. одни символы занимают больше места (типа букв Щ, Щ), а другие - меньше (i, точки и запятые). Это вечная проблема при определении переносов в гздум-текстах, потому каждый раз она решается на глазок, ориентируясь на примерную длину "стандартной" для данной области строки.
1 7 2
Страница 4 из 5Перейти наверх Пред.  1, 2, 3, 4, 5  След.
   Список разделов - Местечко мапперов и моддеров - [Руководство]Все о шрифтах.