Технические подробности

Discussion in 'Обсуждения игры' started by egnaro, Oct 1, 2016.

  1. egnaro

    egnaro Member

    Всем привет!

    Меня зовут Сергей, мне 29 лет и я реверсер со стажем ;)
    Такое уж у меня хобби - ковырять игровые форматы. И Казаки 3 не стали исключением.
    Если кому интересно - я веду топик в англоязычной ветке (http://www.cossacks3.com/forum/index.php?threads/cossacks-3-modding-tools.17542/)

    Сегодня я бы хотел поделиться с вами некоторыми результатами моих исследований ;)

    В первую очередь мне стали интересны форматы 3D моделей.

    Начнем, пожалуй, со статики - OSM.
    Если мы откроем любой их этих файлов в HEX-редакторе, то увидим приблизительно вот такое в начале файла:
    [​IMG]

    Видите те 4 байта в начале - IDP2 ? Это называется file magic - идентификатор файла.
    Бородатые старички наверное уже вздрогнули увидев знакомые буквы, ну а для тех кто помоложе - идем в гугл и спрашиваем "IDP2 3D model format".
    Первой же ссылкой будет статья на википедии - https://en.wikipedia.org/wiki/MD2_(file_format)

    Да, дорогие мои, да! Это старый-добрый MD2 - формат моделей Quake 2.
    Смотрим на описание формата на вики и сверяем с тем что у нас - совпадение 100%.
    Нет, конечно, формат разработчики немного осовременили - в наше время нет смысла хранить текстурные координаты в short а координаты в char. Теперь там float. Так же из заголовка кадра убрали скейл и смещение, оставив, однако, имя кадра, которое у всех кадров одинаковое - "FRAME 000....".
    Да! В этом формате может содержаться анимация. Анимация покадровая (morph animation). Мною замечена, например, в <steam_folder>\Cossacks 3\data\actors\misc\balloon.osm.


    ********************************************************************************

    Ну продолжим. Теперь возьмемся за OSS.
    Все начинается не так радужно - file magic в начале нет, значит формат, скорее всего, уже свой (оказалось что нет :D)
    Не буду тут расписывать как я разбирал этот файл, в этом деле у меня богатый опыт, кому интересно как это происходит - можете почитать у меня здесь (http://3d-orange.com.ua/reversing-game-resources-in-you-are-empty/)

    Вобщем заголовок выглядит так:
    Code:
    struct OSSHeader {
        u32 numFrames;
        u32 fps;
        u32 numBones;
        u32 numVertices;
        u32 numTriangles;
        u32 numTexcoords;
    };


    Формат - отвратителен. Он неоптимален до ужаса, нет иерархии костей, все трансформации костей абсолютны. В общем - тихий ужас.
    Но! Что-то во мне чесалось и шептало - чувак! где-то ты уже это видел!.
    И тут память выдала - да это же пример из старючей статьи XProger'а об анимациях!
    Йо-мое! Да этой же статье лет 10 как минимум! Хехе, ну вот так - разрабы взяли пример из той статьи , и без малейшего изменения кода вставили в движок.

    Но нет худа без добра - скрипт для экспорда моделей в этот формат из 3DS Max'a полностью подходит для создания моделей для игры Cossacks 3 ;)

    ********************************************************************************

    Ну и на последок - файлы локализации.
    Чаще всего такие файлы меня мало интересуют, но т.к. украинская локализация в игре не то что хромает, а ползает в конвульсиях - я решил немного подправить попавшиеся мне на глаза косяки.
    В папке <steam_folder>\Cossacks 3\tools\locale\ вы найдете утилиту от разработчиков для работы с локализационными файлами.
    Но если открыть украинский файл локализации - увидим "кракозяблы" ;)
    [​IMG]

    Хехе, вот так да - официальная туловина не умеет работать с игровой кодировкой (которая, кстати Windows-1251 - привет из 90-х!) Видать UTF-8 разрабы "ниасилили".

    Формат файлов LNG прост до неприличия:
    В начале - int32 - количество записей.
    Дальше массив записей. Каждая запись начинается с int32 - длина записи.
    Дальше сама строка указанной длины (нулевого терминатора в конце строки нет, это же Pascal).
    После строки идет однобайтовый маркер который равен 0x03.
    Как я уже писал выше - записи хранятся в кодировке Windows-1251, и выглядят так:
    text.id=some_text_value.
    Все что до = это идентификатор записи, все что после него - сам текст записи.

    Дальше я за 20 минут набросал утилиту которая позволяет загружать/редактиро/сохранять эти файлы, и, при этом, правильно работает с кодировками ;)
    [​IMG]


    **************************************************************************************

    Казалось бы - ну и чего ты докалупался до разрабов? Ну заюзали старючий MD2, ну взяли код из старой статьи студента. Главное же что работает?
    Нет!
    Проблема этих форматов в том, что они дико не оптимальны! Разбиение текстурных координат и позиций вершин и их индексов не позволяет эффективно их отрисовывать, что выливается в то, что модели рисуются через glBegin/glEnd (sic!) повершинно! Да, оно лежит в display lists, но это слабо спасает ситуацию.
    Формат для анимаций вообще слабо пригоден для более-менее серьезного геймдева и несет кучу неудобств.

    Какой вывод? Лично мой - разработчики этого движка (и не факт что это GSC, ибо этот движок замечен мной еще аж в игре XIII век. Слава или смерть которая вышла 10 лет назад) - халтурщики.
    А GSC - халтурщики вдвойне - запилить игру на таком старючем движке без малейших модификация и/или оптимизаций да еще и с вагоном багов - это сильный просчет менеджерской команды.

    В конце хочу отметить что серию Казаки я очень люблю и Казаки 3 купил в первые же минуты релиза в Steam, и играю с удовольствием. Все вышеописанное - просто мои, как профессионального разработчика, претензии к исполнению :D

    Всем хороших игр!
     
    Last edited: Oct 1, 2016
  2. Притензии на формат, ещё и разработанный знатоком,
    точней даже "отцом"-3D-оптимизаций, ещё со времён Wolf 3D не тормозившем, напомню тогда ещё - при программной отрисовке в отличие от кучи совремнных его форков - даже на 386 20 Mhz ПК с аж 2MB..., почему и ставшей супер-популярным в то время,
    Кармаком...
    - вероятно всё же не совсем обоснованны...

    А, то что формат морально устарел - не спорю, но хватает же игре и это главное.
    И как я понял выше - тот даже оптимизировали в сторону filemap прямого доступа без конверсии, как раз некоторая потенциальная оптимизация скорости доступа.
     
    Last edited by a moderator: Dec 15, 2016
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice