NoX World - форум об игре NoX

 
Пожалуйста, войдите или зарегистрируйтесь.

Войти
Расширенный поиск  
Сейчас онлайн стрима нет!
Сейчас на сервере никого нет!

Обязательно все ознакомьтесь с новыми Правилами Портала!

Актуальные новости:
IP сервера изменён! Новый IP: 45.144.64.229. Сервер также доступен через Westwood Online (XWIS, игру через сервер)


Важные темы:
Как играть по сети? Понятное руководство!
Правила Сервера NoxWorld.
Как помочь форуму финансово?

Автор Тема: Разбор шрифтов от Garett'a  (Прочитано 28786 раз)

0 Пользователей и 2 Гостей смотрят эту тему.

Dio

  • Глобальный модератор
  • Старожил
  • **
  • Карма: 99
  • Оффлайн Оффлайн
  • Сообщений: 1274
  • Некромансеры "живы"!
  • Awards Орден 'За заслуги перед форумом I степени' Активным участникам сходок - 2013 За релиз ЮниМода За набор курсоров для Windows За разгадку главного секрета Nox Знак 'За тягу к тайнам Nox'
    • Просмотр профиля
    • Awards

Spoiler (click to show/hide)



Справка.
Для тех, кому не нравятся существующие шрифты в игре.


В Nox-е используется предположительно три файла шрифтов large.fnt, number.fnt и small.fnt.
Будет рассмотрено как получить и изменить (если необходимо) изображения символов. На примере самого маленького файла.


Содержание файла number.fnt в шестнадцатиричном виде или в виде набора байт с их значениями (по две цифры на байт).


00000000: 0A 00 02 00 06 00 01 00  00 00 00 00 30 00 39 00
00000010: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00000020: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00000030: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00000040: 00 00 00 00 00 00 00 00  0D 00 00 00 05 70 00 D8
00000050: 00 D8 00 D8 00 D8 00 70  00 03 60 00 E0 00 60 00
00000060: 60 00 60 00 60 00 05 70  00 D8 00 18 00 70 00 C0
00000070: 00 F8 00 05 70 00 D8 00  30 00 18 00 D8 00 70 00
00000080: 05 30 00 70 00 70 00 F0  00 F8 00 30 00 05 F8 00
00000090: C0 00 F0 00 18 00 D8 00  70 00 05 70 00 C0 00 F0
000000A0: 00 D8 00 D8 00 70 00 05  F8 00 18 00 30 00 60 00
000000B0: 60 00 60 00 05 70 00 D8  00 70 00 D8 00 D8 00 70
000000C0: 00 05 70 00 D8 00 D8 00  78 00 18 00 70 00


Предположительно в этом файле должны содержаться изображения цифр (арабских). Всего их 10 штук: "0","1","2","3","4","5","6","7","8","9".
Визуальный анализ позволяет выделить в файле две части, разделенные строками нулей.


Первая часть:
00000000: 0A 00 02 00 06 00 01 00  00 00 00 00 30 00 39 00
00000010: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00000020: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00000030: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00000040: 00 00 00 00 00 00 00 00  0D 00 00 00


Вторая часть:
00000040:                                      05 70 00 D8
00000050: 00 D8 00 D8 00 D8 00 70  00 03 60 00 E0 00 60 00
00000060: 60 00 60 00 60 00 05 70  00 D8 00 18 00 70 00 C0
00000070: 00 F8 00 05 70 00 D8 00  30 00 18 00 D8 00 70 00
00000080: 05 30 00 70 00 70 00 F0  00 F8 00 30 00 05 F8 00
00000090: C0 00 F0 00 18 00 D8 00  70 00 05 70 00 C0 00 F0
000000A0: 00 D8 00 D8 00 70 00 05  F8 00 18 00 30 00 60 00
000000B0: 60 00 60 00 05 70 00 D8  00 70 00 D8 00 D8 00 70
000000C0: 00 05 70 00 D8 00 D8 00  78 00 18 00 70 00


Первая чать не интересна (одни нули), во второй, вероятно как раз содержится информаци о изображениях символов.
Всего символов 10 штук. Смотрим вторую часть и считаем количества различных значений байтов. В теории, для каждого символа должна быть отдельное изображение, эти картинки должны быть как-то отделены друг от друга. Вероятнее всего этим разделителем является байт со значением "05" - их ровно 9 штук и распределены равномерно (за исключение одного, первого, но если взять еще одно значение разделителя "03" - все начинает сходиться).


Соответственно перестроим вторую часть, перенося строки по байту "05" ("03"):
05 70 00 D8 00 D8 00 D8 00 D8 00 70 00
03 60 00 E0 00 60 00 60 00 60 00 60 00
05 70 00 D8 00 18 00 70 00 C0 00 F8 00
05 70 00 D8 00 30 00 18 00 D8 00 70 00
05 30 00 70 00 70 00 F0 00 F8 00 30 00
05 F8 00 C0 00 F0 00 18 00 D8 00 70 00
05 70 00 C0 00 F0 00 D8 00 D8 00 70 00
05 F8 00 18 00 30 00 60 00 60 00 60 00
05 70 00 D8 00 70 00 D8 00 D8 00 70 00
05 70 00 D8 00 D8 00 78 00 18 00 70 00


Теперь, как перевести эти строки в изображения. Сначала вынесем из каждой строки первый байт ("05" и "03") на отдельную строку, а всю остальную часть разделим на короткие строки по два байта. Далее нужно перевести все в двоичный вид.


05
70 00 -> 01110000 00000000
D8 00 -> 11011000 00000000
D8 00 -> 11011000 00000000
D8 00 -> 11011000 00000000
D8 00 -> 11011000 00000000
70 00 -> 01110000 00000000
03
60 00 -> 01100000 00000000
E0 00 -> 11100000 00000000
60 00 -> 01100000 00000000
60 00 -> 01100000 00000000
60 00 -> 01100000 00000000
60 00 -> 01100000 00000000
05
70 00 -> 01110000 00000000
D8 00 -> 11011000 00000000
18 00 -> 00011000 00000000
70 00 -> 01110000 00000000
C0 00 -> 11000000 00000000
F8 00 -> 11111000 00000000
05
70 00 -> 01110000 00000000
D8 00 -> 11011000 00000000
30 00 -> 00110000 00000000
18 00 -> 00011000 00000000
D8 00 -> 11011000 00000000
70 00 -> 01110000 00000000
05
30 00 -> 00110000 00000000
70 00 -> 01110000 00000000
70 00 -> 01110000 00000000
F0 00 -> 11110000 00000000
F8 00 -> 11111000 00000000
30 00 -> 00110000 00000000
05
F8 00 -> 11111000 00000000
C0 00 -> 11000000 00000000
F0 00 -> 11110000 00000000
18 00 -> 00011000 00000000
D8 00 -> 11011000 00000000
70 00 -> 01110000 00000000
05
70 00 -> 01110000 00000000
C0 00 -> 11000000 00000000
F0 00 -> 11110000 00000000
D8 00 -> 11011000 00000000
D8 00 -> 11011000 00000000
70 00 -> 01110000 00000000
05
F8 00 -> 11111000 00000000
18 00 -> 00011000 00000000
30 00 -> 00110000 00000000
60 00 -> 01100000 00000000
60 00 -> 01100000 00000000
60 00 -> 01100000 00000000
05
70 00 -> 01110000 00000000
D8 00 -> 11011000 00000000
70 00 -> 01110000 00000000
D8 00 -> 11011000 00000000
D8 00 -> 11011000 00000000
70 00 -> 01110000 00000000
05
70 00 -> 01110000 00000000
D8 00 -> 11011000 00000000
D8 00 -> 11011000 00000000
78 00 -> 01111000 00000000
18 00 -> 00011000 00000000
70 00 -> 01110000 00000000


Становится понятно, что означают байты "05" и "03" - это относительная ширина изображения символа.
Соответственно, измение значения некоторых байт, можно изменить отображение этих символов в самой игре. Но где конкретно используются именно цифры из файла number.fnt, я не проверял.
Остальные файлы шрифтов default.fnt, large.fnt и small.fnt анализируются подобным образом (default.fnt по умолчанию совпадает со small.fnt).




Практичекое применение в приложенном файле шрифта. В нем я заменил арабские цифры на изображения китайских чисел от 0 до 9.
Важно, файл шрифта изменен для английской локализации, русский текст будет отображаться некорректно.

Garett (c)

Perfect: предыстория.
« Последнее редактирование: 31/08/2012 19:26:21 от Perfect »
Записан
Пользуйтесь UniMod-ом.
Расширенный поиск  
 

Страница сгенерирована за 0.175 секунд. Запросов: 23.