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

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

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

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

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


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

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

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

Dio

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

Еще помогу товарищем которые собираются делать программы для редактирования шрифтов)
Расскажу как Nox разбирает шрифты на примере large.fnt и number.fnt

Он подгружает файл шрифтов и грузит первые 0x1c байт.
 
74 4E 6F 46
01 00 00 00
13 00 00 00
03 00 00 00
10 00 00 00
01 00 00 00
31 00 00 00

тут у нас 7 dword-ов (7 по 4 байт)
Другое дело что записаны они не в привычном нам виде. Переделаем. В итоге получим вот что (при разборе number.fnt мы получим другой результат)

1. 0x466F4E74
2. 01
3. 0x13
4. 03
5. 0x10
6. 01
7. 0x31

Далее Nox работает с этими числами.
Сперва он смотрит на первый байт. Число 0x466F4E74 указывает игре что этот файл надо разбирать следующим методом (он так разбирает default.fnt large.fnt и так далее, его нет например в number.fnt)
Не буду сильно внедряться в структуры его данных, так навряд ли вам это как то поможет.
Дальше он берет 6-ой dword умножает его на 8 (4 ворда) и читает это кол-во байт. У нас получится что он прочитает так

1А 00 00
2А 00 00
3А 1F 00
4А FF 00

Далее игра смотри было ли ли что в 6-ом dword-е, и если не было то пропускает первые 2 word-a и считывает 3А-йе и 4А-ое. Вычитает из 4А-ого 3А-е и к полученному результату прибавляет единицу (в данном случае получится 0xE1). Это я так понимаю кол-во символов в файле.

Потом Nox умножает это значение (в нашем случае 0xE1) на 7-ой dword и полученное кол-во байт считывает из файла. Это уже сами буквы, ничего не буду добавлять по ним.
Если кстати подсчитать то 0x1c + 8 + 0xE1*0x31 = 11061 байт, а это и есть размер файла.

Итого (значение всех параметров)

1. Зашифрованное слово, если его там нет то нокс будет думать что это number.fnt
2. Не используется
3. Считывается, но не используется
4. некий шаг в байтах при считывании симбола. В итоге влияет на размер букв (1 маленькие, 2 средние, и 3 большие). Если прибавить к этому значению единицу, то оно должно быть кратным максимальной высоте симболов
5. Максимальная высота симболов
6. Кол-во списков букв. То есть списки букв как в large.fnt 1F - FF, по идее можно было пропустить пару симболов и сделать там 2 списка и записать 00 00 1F 2F 00 00 34 FF. Мы бы пропустили пару симболов между 2F и 34
7. Кол-во байт которое занимает 1 буква.

1А. Отступ по таблице вперед с номера 3А (влияет ессно на графическое отображение)
2А. Не знаю если честно, но лучше не трогайте
3А. Первый номер симбола по таблице
4А. Последний номер по таблице

Таблицу я имею ввиду ACSII


Чуть иная загрузка у number.fnt

Nox грузит первые 0x4c байт
Это весь заголовок, он статичен. Сразу расскажу о том какие типы данных и что делают

1. word Не юзается
2. word Шаг в байтах при считывании
3. word Максимальная высота
4. word кол-во списков
5. word Отступ по таблице вперед
6. word Не знаю если честно, но лучше не трогайте
7. word Первый номер симбола по таблице
8. word Последний номер по таблице
9-36 (word) повторяется что и 5-8. Та же самая функция
37. dword Размер одного симбола

Тут место для списков уже забито с 5 по 36 word.
Записан
Пользуйтесь UniMod-ом.
Расширенный поиск  
 

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