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

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'а об анимациях!
    http://xproger.info/export_anim.html
    Йо-мое! Да этой же статье лет 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 11, 2016
  2. egnaro

    egnaro Member

    Очень извиняюсь - запостил не в тот раздел. Как удалить тред?
     
  3. icosferu

    icosferu Active Member

    Да не, шикарный раздел.
     
  4. [GLC]ZA

    [GLC]ZA Active Member

    Туда мне кажется)

    Вопрос, где проги друг? Пожалуйста выкладывай все проги которые сделаешь, а то не дай бог пропадешь с форума и модеры не программисты лапу будут сосать.
     
  5. [GLC]ZA

    [GLC]ZA Active Member

    Видимо фрилансеры которых нанимала GSC это команда модеров игры XIII век. Слава или смерть
     
  6. [GLC]ZA

    [GLC]ZA Active Member

    Вчера ноут кританул и перестали ставиться обновы, но я ручками скачал dll 32 бита и кинул в папку SysWOW64, хотя операционка 8,1 64 бита. Закачивал все dll что просила прога, в итоге получил "C3ModelViewer.exe точка входа в процедуру _lock_file не найдена в библиотеке DLL", помоги решить
     
  7. [-RUS-]AlliGator

    [-RUS-]AlliGator New Member

    Круто! Добавлю, что тип файла .osm определяется стандартной unix'овой утилитой file, или онлайн сервисами по определению типа файла. Правда в стандартных вьюверах они у меня не смогли отобразится корректно, видимо формат действительно модифицированный.

    Ппц. Это значит что кириллица в чатике в не русской версии отображается кракозябами, как в старые добрые...
     
  8. cozak1984

    cozak1984 Member

    спасибо за пост..но меня интересует только одно....я не разбираюсь во всех этих технических краказябрах....но меня интересует только одно...так в итоге мододелы смогут делать свои моды различные или мы будем играть в оригинальные казаки 3 без всяких изменени.....
     
  9. [GA]^Admiral^

    [GA]^Admiral^ New Member

    Хоть я в программировании полный ноль, но статью было интересно читать=))
     
  10. egnaro

    egnaro Member

    Мододелы уже вовсю препарируют игру. Разработчики, как минимум, не препятствуют.
    Я стараюсь помогать мододелам раскрывая внутренности игры и разрабатывая для них нужные инструменты.
    Все будет ;)


    Спасибо за отзыв. Чукча не писатель ;)
     
  11. То что формат не оптимален - гнусная инсинуация;)
    Поглядел, в формате же есть специальный блок именно для OGL оптимизированной отсылки команд. А, то что там есть возможность переключения типа склейки треугольников - так их ведь никто в формате не заставляет использовать больше одного одновременно.

    Ещё напомню что этот формат разрабатывал - всего лишь лжебог квакеров-думеров Кармак... Таки самый известный знаток и даже изобретатель 3D оптимизаций ещё со времён Wolf 3D. Который получил популярность именно потому что был оптимизирвоанней всех остальных технически схожих конкуретнов и смог выдать значительно более приемлемую картинку.
    Хоть конечно после D2 его компания - явно вошла в сговор с Intel/AMD и стала лепить откровенные "тормоза"(да, да - даже Q1 мог бы быть и пооптимальней, его движок деоптимизирвоали в сранении с W3D/D12 убрав fp, точно не мешающие никому mathLUTы используя даже не ассемблерныевызовы соотв-х math команд а гипер тормоза из стандартной библиотеки и вероятно ещё что нибудь незадействовали), но всёравно они были чуть быстрее конкурентов (напомню, ао времена Q2 - лагаючие U1/UT1/HL - требующие Update до самых топовые ПК тогда, а тоже не то что бы нетормоз HL12 был их чуть быстрее потому что был весь на движке Q1), впрочем то было не долго... и D3 для безлаговости на максимуме - уже требовал 512 MB видеокарту даже отсутствующую в обычных магазинах, а уж про нынешнее их поделие с его сист.требованиями и сомнительными графическими улучшения - и не говорю. Там кстати в sfx в спектрограммах случайно обнаружили скрытую пентаграмму сатанистов и даже их же 666. Кому - как бэ "юмор", а кому (давно подозреваемый)показатель... Ведь одно дело попасть в игровой мир Q1 условно-тематически с пентаграммами(хоть конечно уже в Q3 - мир не относился к Q1 никак и вообще откровенно навязывали осквернение пентаграммами игроку),
    другое дело это 666... И тем более воспринимать их все - закодированно, тем более даже неподозревая о том
    - подсознательно воспринимая слушая каждую секунду...
     
    Last edited: Dec 24, 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