Всем привет! Меня зовут Сергей, мне 29 лет и я реверсер со стажем Такое уж у меня хобби - ковырять игровые форматы. И Казаки 3 не стали исключением. Если кому интересно - я веду топик в англоязычной ветке (https://www.cossacks3.com/forum/index.php?threads/cossacks-3-modding-tools.17542/) Сегодня я бы хотел поделиться с вами некоторыми результатами моих исследований В первую очередь мне стали интересны форматы 3D моделей. Начнем, пожалуй, со статики - OSM. Если мы откроем любой их этих файлов в HEX-редакторе, то увидим приблизительно вот такое в начале файла: Spoiler: Скриншот Видите те 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 в начале нет, значит формат, скорее всего, уже свой (оказалось что нет ) Не буду тут расписывать как я разбирал этот файл, в этом деле у меня богатый опыт, кому интересно как это происходит - можете почитать у меня здесь (http://3d-orange.com.ua/reversing-game-resources-in-you-are-empty/) Вобщем заголовок выглядит так: Spoiler: Код 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\ вы найдете утилиту от разработчиков для работы с локализационными файлами. Но если открыть украинский файл локализации - увидим "кракозяблы" Spoiler: Screenshot Хехе, вот так да - официальная туловина не умеет работать с игровой кодировкой (которая, кстати Windows-1251 - привет из 90-х!) Видать UTF-8 разрабы "ниасилили". Формат файлов LNG прост до неприличия: В начале - int32 - количество записей. Дальше массив записей. Каждая запись начинается с int32 - длина записи. Дальше сама строка указанной длины (нулевого терминатора в конце строки нет, это же Pascal). После строки идет однобайтовый маркер который равен 0x03. Как я уже писал выше - записи хранятся в кодировке Windows-1251, и выглядят так: text.id=some_text_value. Все что до = это идентификатор записи, все что после него - сам текст записи. Дальше я за 20 минут набросал утилиту которая позволяет загружать/редактиро/сохранять эти файлы, и, при этом, правильно работает с кодировками Spoiler ************************************************************************************** Казалось бы - ну и чего ты докалупался до разрабов? Ну заюзали старючий MD2, ну взяли код из старой статьи студента. Главное же что работает? Нет! Проблема этих форматов в том, что они дико не оптимальны! Разбиение текстурных координат и позиций вершин и их индексов не позволяет эффективно их отрисовывать, что выливается в то, что модели рисуются через glBegin/glEnd (sic!) повершинно! Да, оно лежит в display lists, но это слабо спасает ситуацию. Формат для анимаций вообще слабо пригоден для более-менее серьезного геймдева и несет кучу неудобств. Какой вывод? Лично мой - разработчики этого движка (и не факт что это GSC, ибо этот движок замечен мной еще аж в игре XIII век. Слава или смерть которая вышла 10 лет назад) - халтурщики. А GSC - халтурщики вдвойне - запилить игру на таком старючем движке без малейших модификация и/или оптимизаций да еще и с вагоном багов - это сильный просчет менеджерской команды. В конце хочу отметить что серию Казаки я очень люблю и Казаки 3 купил в первые же минуты релиза в Steam, и играю с удовольствием. Все вышеописанное - просто мои, как профессионального разработчика, претензии к исполнению Всем хороших игр!
Туда мне кажется) Вопрос, где проги друг? Пожалуйста выкладывай все проги которые сделаешь, а то не дай бог пропадешь с форума и модеры не программисты лапу будут сосать.
Вчера ноут кританул и перестали ставиться обновы, но я ручками скачал dll 32 бита и кинул в папку SysWOW64, хотя операционка 8,1 64 бита. Закачивал все dll что просила прога, в итоге получил "C3ModelViewer.exe точка входа в процедуру _lock_file не найдена в библиотеке DLL", помоги решить
Круто! Добавлю, что тип файла .osm определяется стандартной unix'овой утилитой file, или онлайн сервисами по определению типа файла. Правда в стандартных вьюверах они у меня не смогли отобразится корректно, видимо формат действительно модифицированный. Ппц. Это значит что кириллица в чатике в не русской версии отображается кракозябами, как в старые добрые...
спасибо за пост..но меня интересует только одно....я не разбираюсь во всех этих технических краказябрах....но меня интересует только одно...так в итоге мододелы смогут делать свои моды различные или мы будем играть в оригинальные казаки 3 без всяких изменени.....
Мододелы уже вовсю препарируют игру. Разработчики, как минимум, не препятствуют. Я стараюсь помогать мододелам раскрывая внутренности игры и разрабатывая для них нужные инструменты. Все будет Спасибо за отзыв. Чукча не писатель
То что формат не оптимален - гнусная инсинуация Поглядел, в формате же есть специальный блок именно для 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... И тем более воспринимать их все - закодированно, тем более даже неподозревая о том - подсознательно воспринимая слушая каждую секунду...