Вскрытие ресурсов Метро 2033 |
Здравствуйте, гость ( Авторизация | Регистрация )
Вскрытие ресурсов Метро 2033 |
18.03.2010, 10:28
Сообщение
#221
|
|
Почти Игрок Репутация: 18 Группа: Забанен Сообщений: 28 Регистрация: 22.10.2009 |
ПО для работы с ресурсами игры Обсуждение ПО для работы с ресурсами Мелкие моды и фиксы Моддинг. Общее обсуждение Советы и решения Работа с bump- и normalmaps (от iOrange) В альфе лежит бамп, а в зеленом канале (если я правильно понял) лежит Gloss-Map (регулирующая силу specular-бликов). Если Вам нужна normal-map, то бапм легко в нее превратить: 1) Качаем плагин nVidia для фотошопа (тыц) 2) Открываем в фотошопе интересующий бамп (например act\act_bab_body_bump.512.dds) 3) Выделяем все четыре канала (RGB + Alpha) 4) Жмем Filter->NVIDIA Tools->NormalMapFilter... 5) В появившемся окне в разделе Height Source выбираем Alpha Channel 6) Ставим нужный scale (я ставлю 10) 7) Жмем OK 8) Наслаждаемся результатом Сообщение отредактировал Deimos - 20.04.2010, 17:01 -------------------- забанen по собственному желанию
|
 
|
|
|
|
31.03.2010, 15:15
Сообщение
#222
|
|
BFG9000 owner
Половина землекопа Репутация: 247 Куратор темы Сообщений: 1813 Награды: 3 Регистрация: 30.03.2010 |
Вау, внезапно ))) Привет )) Да, как и говорил исходники будут вечером. А формат простой - чанк с ID = 9 -> размер файла чанк с ID = 0 -> пока не понял, просто пропускаю чанк с ID = 1 -> тоже не понятен, всегда 64 байта, пропускаем чанк с ID = 2 -> названия материалов, разделенные нулем чанк с ID = 3 -> вершины (размер чанка, тип вершины (???), кол-во вершин, данные) чанк с ID = 4 -> индексы (размер чанка, и соббсно данные) чанк с ID = 9 - только один на файл, остальные могут встречаться много раз, и в перемешку ну раз пошла такая пъянка - вот исходник моей читалки модели MetroModelReader.h Код #ifndef __MetroModelReader_h__ #define __MetroModelReader_h__ #include <string> struct MetroModelVertex { Point3 pos; union { struct { DWORD a, b; }; struct { float fa, fb; }; }; Point3 normal; }; typedef unsigned short MetroModelIndex; class CMetroModelReader { public: CMetroModelReader(); ~CMetroModelReader(); int OpenModelFile(const std::string& fileName); int MakeMaxMesh(Mesh* mesh); private: void ReadChunk(unsigned int chunkID, unsigned int chunkSize, FILE* file); unsigned int m_VBSize; unsigned int m_IBSize; unsigned int m_NumVerteces; unsigned int m_NumIndeces; MetroModelVertex *m_VBPtr; MetroModelIndex *m_IBPtr; }; #endif // __MetroModelReader_h__ MetroModelReader.cpp Код #include "Metro2033MeshImport.h" #include "MetroModelReader.h" #define METRO_CHUNK_NULL 0x00000000 // iOrange - ???? #define METRO_CHUNK_UNKNOWN 0x00000001 // iOrange - ???? #define METRO_CHUNK_MATERIALS 0x00000002 // iOrange - some materials names #define METRO_CHUNK_VERTEXDATA 0x00000003 // iOrange - vertex data chunk #define METRO_CHUNK_INDEXDATA 0x00000004 // iOrange - indexes data chunk #define METRO_CHUNK_IGNORETHIS 0x00000009 // iOrange - it seems that need to be ignored CMetroModelReader::CMetroModelReader() : m_VBSize(0) , m_IBSize(0) , m_NumVerteces(0) , m_NumIndeces(0) , m_VBPtr(NULL) , m_IBPtr(NULL) { } CMetroModelReader::~CMetroModelReader() { } int CMetroModelReader::OpenModelFile(const std::string& fileName) { FILE* file = NULL; fopen_s(&file, fileName.c_str(), "rb"); if (!file) return FALSE; unsigned int chunkID, chunkSize; while (!feof(file)) { fread(&chunkID, 4, 1, file); fread(&chunkSize, 4, 1, file); ReadChunk(chunkID, chunkSize, file); if (METRO_CHUNK_INDEXDATA == chunkID) break; } fclose(file); return TRUE; } void CMetroModelReader::ReadChunk(unsigned int chunkID, unsigned int chunkSize, FILE* file) { switch (chunkID) { // iOrange - just ignore these chunks to be ignored case METRO_CHUNK_NULL: case METRO_CHUNK_IGNORETHIS: return; case METRO_CHUNK_MATERIALS: { //std::cout << "Found materials chunk" << std::endl << "\tSize = " << chunkSize << std::endl; } break; case METRO_CHUNK_VERTEXDATA: { //std::cout << "Found vertexdata chunk" << std::endl << "\tSize = " << chunkSize << std::endl; unsigned int stub0 = 0; fread(&stub0, 4, 1, file); fread(&m_NumVerteces, 4, 1, file); m_VBPtr = new MetroModelVertex[m_NumVerteces]; fread(m_VBPtr, m_NumVerteces * sizeof(MetroModelVertex), 1, file); } return; case METRO_CHUNK_INDEXDATA: { //std::cout << "Found indexdata chunk" << std::endl << "\tSize = " << chunkSize << std::endl; fread(&m_NumIndeces, 4, 1, file); m_IBPtr = new MetroModelIndex[m_NumIndeces]; fread(m_IBPtr, m_NumIndeces * sizeof(MetroModelIndex), 1, file); } return; default: //std::cout << "Found unknown chunk id = " << ext::Hex(8) << chunkID << ", size = " << chunkSize << std::endl; break; } fseek(file, chunkSize, SEEK_CUR); } Сообщение отредактировал iOrange - 31.03.2010, 15:23 -------------------- Hello worlds!
|
 
|
|
31.03.2010, 16:23
Сообщение
#223
|
|
Новичок Репутация: 4 Группа: Участник Сообщений: 6 Регистрация: 31.03.2010 |
Суепр ! iOrange Сделай пожалуйста для 3D max 9
У меня не получается извлечь модели с помощью 3D Ripper DX Когда я нажимаю на запись то игра сначала подвисает (так и должно быть) но потом вылетает... А когда я в максе открываю то что программа "сфоткала" , я вижу пустое место. Все настройки я сделал. У меня стоит Win7 может из-за этого не работать ? |
 
|
|
31.03.2010, 16:29
Сообщение
#224
|
|
Почти Игроман Репутация: 395 Группа: Участник Сообщений: 684 Награды: 2 Регистрация: 25.01.2010 |
iOrange,
Вы не планируете сделать аналогичный импорт для Maya? -------------------- ...Имен не осталось. Приказано забыть 14/88 |
 
|
|
31.03.2010, 16:31
Сообщение
#225
|
|
Почти Игрок Репутация: 18 Группа: Забанен Сообщений: 28 Регистрация: 22.10.2009 |
-------------------- забанen по собственному желанию
|
 
|
|
31.03.2010, 16:33
Сообщение
#226
|
|
Опытный Геймер Репутация: 147 Группа: Участник Сообщений: 182 Регистрация: 08.09.2008 |
Давайте меряться списком чанков в моделях
У меня такой: Ид чанка 1 - заголовок, размер 0х40 содержимое: byte Version;//версия /// <summary> /// enum /// 0 - model_std /// 1 - model_hierrarhy /// 2 - model_skeleton /// 3 - model_skeleton /// 4 - model_hierrarhy /// 5 - model_skin /// 8 - model soft /// 11 - rparticles__effect /// 12 - rparticles__system /// 13 - model_skeleton /// </summary> byte Type;//тип модели UInt16 Index;//какой-то индекс дальше бокс и сфера из float, в которые вписывается модель 2 - мне кажется это текстуры string Tex1; string Tex2; string Tex3; 3 - вершины в начале идет UInt32 VertexFormat; , потом собственно массив вершин 4 - индексы 9 - кучка моделей внутри идут чанки с ИД от 0 до N. А внутри каждого чанка модель, которую надо разбирать сначала 11 - Lod1 внутри снова отдельная модель Также вместо этого чанка, иногда лежит в отдельном файле. В имени файла суффикc _lod1 12 - Lod2 внутри модель Также вместо этого чанка, иногда лежит в отдельном файле. В имени файла суффикc _lod2 16 - внутри идут строчки подряд, ссылки на отдельные файлы моделей 18 - параметры string HitFactorRef;//ссылается на string.Format(@"content\scripts\hit_factors_presets_{0}.bin", HitFactorRef) дальше иногда бывают строчки с типами объектов 20 - ссылка на файл скелета string SkeletonRef; 24 - вроде скелет, сразу встроенный в модель 25 - несколько строк подряд 26 - внутри одна строка И если есть, то всегда что-то вроде human_head_speech 29 - внутри строка 31 - внутри строка Сообщение отредактировал Kolmogor - 31.03.2010, 16:35 |
 
|
|
31.03.2010, 17:29
Сообщение
#227
|
|
BFG9000 owner
Половина землекопа Репутация: 247 Куратор темы Сообщений: 1813 Награды: 3 Регистрация: 30.03.2010 |
Привет всем
1 - давайте на "ты" 2 - тот плагин что я выложил он ооочень базовый теперь имея очень полезную инфу от Kolmogor надеюсь в течении суток заклепать более-менее полноценный плагин для статики. итак список "максов" - 3DSMax 2009, 3DSMax 9, 3DSMax 8 - все? ок, скачаю остальные и соберу под них. ОСК - под майку никогда не писал, но думаю смогу. Вам под какую версию майки? В планах: 1 - Экспорт статики в формат Metro2033 2 - Импорт анимации. Kolmogor подсказал где скелет, осталось найти их анимационные треки и веса для вершин - и можно приступать к импорту анимации. 3 - Экспорт анимации в формат Metro2033 PS. Kolmogor - а где добыл все это добро? А вообще ты молодец, спасибо за инфу! /// <summary> /// enum /// 0 - model_std /// 1 - model_hierrarhy /// 2 - model_skeleton /// 3 - model_skeleton /// 4 - model_hierrarhy /// 5 - model_skin /// 8 - model soft /// 11 - rparticles__effect /// 12 - rparticles__system /// 13 - model_skeleton /// </summary> Сообщение отредактировал iOrange - 31.03.2010, 17:48 -------------------- Hello worlds!
|
 
|
|
31.03.2010, 17:45
Сообщение
#228
|
|
Почти Игроман Репутация: 395 Группа: Участник Сообщений: 684 Награды: 2 Регистрация: 25.01.2010 |
iOrange,
Планы впечатляют. Я использую Maya 8.5. -------------------- ...Имен не осталось. Приказано забыть 14/88 |
 
|
|
31.03.2010, 18:00
Сообщение
#229
|
|
Опытный Игрок Репутация: 37 Группа: Участник Сообщений: 59 Регистрация: 31.12.2009 |
Цитата Привет всем smile.gif здаров Цитата так список "максов" - 3DSMax 2009, 3DSMax 9, 3DSMax 8 ну из максов можно ещё на десятый добить, ну а на версии раньше восьмой делать бессмысленно |
 
|
|
31.03.2010, 18:05
Сообщение
#230
|
|
грандмастер бит Репутация: 352 Группа: Участник Сообщений: 3274 Награды: 5 Регистрация: 18.02.2009 |
На 2008 забабахай
-------------------- |
 
|
|
31.03.2010, 21:47
Сообщение
#231
|
|
Почти Игроман Репутация: 70 Группа: Забанен Сообщений: 631 Регистрация: 25.11.2009 |
Похвастаюсь и я своим плагином )))
У некоторых элементов жмура вершины индексируются в обратном порядке, из-за чего поверхность выворачивается наизнанку, а у некоторых норм. Как с этим бороться? -------------------- забанен, нарушение правил, пп. 2.1 и 7.2
|
 
|
|
31.03.2010, 23:35
Сообщение
#232
|
|
Опытный Геймер Репутация: 147 Группа: Участник Сообщений: 182 Регистрация: 08.09.2008 |
1 апреля наступило
вот содержимое scripts.bin http://webfile.ru/4397762 с именами файлов только пока проблема |
 
|
|
31.03.2010, 23:39
Сообщение
#233
|
|
Почти Игроман Репутация: 70 Группа: Забанен Сообщений: 631 Регистрация: 25.11.2009 |
-------------------- забанен, нарушение правил, пп. 2.1 и 7.2
|
 
|
|
31.03.2010, 23:56
Сообщение
#234
|
|
Опытный Геймер Репутация: 147 Группа: Участник Сообщений: 182 Регистрация: 08.09.2008 |
неее, он состоит из чанков, у которых ИД это СRС32 от имени файла
какие-то имена файлов нашлись, а остальные нет |
 
|
|
01.04.2010, 00:18
Сообщение
#235
|
|
Почти Игроман Репутация: 70 Группа: Забанен Сообщений: 631 Регистрация: 25.11.2009 |
Kolmogor, понятно.
Я про модель, у лодов полики почему-то в обратную сторону развернуты, на первом скрине они есть, на втором удалены. -------------------- забанен, нарушение правил, пп. 2.1 и 7.2
|
 
|
|
01.04.2010, 01:11
Сообщение
#236
|
|
Почти Игроман Репутация: 70 Группа: Забанен Сообщений: 631 Регистрация: 25.11.2009 |
Блин, до меня доехало что это такое ))) Это невидимые в игре элементы на трупе, при наведении на которые прицела, можно снимать аптечки всякие, патроны с трупа, а полигоны внутрь смотрят, чтобы их не видно было в игре ))
-------------------- забанен, нарушение правил, пп. 2.1 и 7.2
|
 
|
|
01.04.2010, 02:51
Сообщение
#237
|
|
Магистр Игры Репутация: 270 Группа: Участник Сообщений: 2620 Награды: 4 Регистрация: 26.03.2007 |
вот содержимое scripts.bin ... с именами файлов только пока проблема форматом не поделишься? может и с именами поможем чем-нить. а вобще получается, что конфиги у нас открытые, а скрипты компилированные, и все заявления разрабов что они использовали Lua только при разработке (мол движок с Lua-скриптами будет сильно жручий и неподъемный) - мягко говоря неправда. в сталкере скрипты компилировались перед запуском, здесь же этот этап пропущен, но особой разницы нет. да, похоже наступает эра "Real Weapon Сharacteristics" модов ;) правда предсказанный мной ранее "Real Weapon Sound" так до сих пор и не появился, поэтому может я ошибаюсь ;) |
 
|
|
01.04.2010, 03:24
Сообщение
#238
|
|
Почти Игроман Репутация: 70 Группа: Забанен Сообщений: 631 Регистрация: 25.11.2009 |
HikeR, это вероятно в целях экономии памяти сделано, разного рода компиляторы требовательны к памяти, а разработчики игру в память х-ящика старались уплотнить.
З.Ы. Вот после этого я консольщиков еще больше не люблю. -------------------- забанен, нарушение правил, пп. 2.1 и 7.2
|
 
|
|
01.04.2010, 06:14
Сообщение
#239
|
|
Почти Мастер Репутация: 250 Группа: Забанен Сообщений: 1131 Награды: 1 Регистрация: 25.01.2010 |
surfer, похоже что чёрное на твоей модели, это часть (верхний слой) модели с прозрачной текстурой (кровь в игре).
т.е. удалять этот слой при импорте нельзя! (это я так, на всякий случай) да, похоже наступает эра "Real Weapon Сharacteristics" модов правда предсказанный мной ранее "Real Weapon Sound" так до сих пор и не появился, поэтому может я ошибаюсь а обратный процесс работает (запаковки в бин) или конфиги будут прям напрямую подхватываться? думаю просто, что весь интузиазм по модингу метра собрался на этом сайте По большому счёту модить линейную паруразпроходную игру не особо интересно -------------------- До каких пор людей, по крохам собиравших державу и беспощадно каравших её врагов, мы будем обзывать палачами, а индивидов, разваливших страну и пустивших на ветер труды целых поколений, именовать реформаторами? (Ф.М. Достоевский)
Прочитай сам, сообщи другому! Убей салоедного имперца - спаси триединство: Белоруссия, Россия, Украина |
 
|
|
01.04.2010, 08:49
Сообщение
#240
|
|
BFG9000 owner
Половина землекопа Репутация: 247 Куратор темы Сообщений: 1813 Награды: 3 Регистрация: 30.03.2010 |
дописал плагин - теперь правильно импортит статику.
Картина Репина "Труп смотрит телевизор" )) Плагин собран под: 3DS Max 2010 32-bit 3DS Max 2009 32-bit 3DS Max 2008 32-bit 3DS Max 9 32-bit надеюсь никого не забыл ЗЫ. Под майку работаю, надеюсь скоро будет
Прикрепленные файлы
Metro2033MeshImport_max2010.zip ( 9,34 килобайт )
Кол-во скачиваний: 117
Metro2033MeshImport_max2009.zip ( 9,24 килобайт ) Кол-во скачиваний: 98 Metro2033MeshImport_max2008.zip ( 9,24 килобайт ) Кол-во скачиваний: 83 Metro2033MeshImport_max9.zip ( 9,24 килобайт ) Кол-во скачиваний: 101 -------------------- Hello worlds!
|
 
|
|
01.04.2010, 09:34
Сообщение
#241
|
|
Опытный Геймер Репутация: 147 Группа: Участник Сообщений: 182 Регистрация: 08.09.2008 |
а вобще получается, что конфиги у нас открытые, а скрипты компилированные, и все заявления разрабов что они использовали Lua только при разработке (мол движок с Lua-скриптами будет сильно жручий и неподъемный) - мягко говоря неправда. скриптов в ресурсах по-моему вообще нет, так что слова "про ЛУА только для разработки" наоборот похожи на правду Формат scripts.bin простой. В нем последовательно идут чанки - файлы конфигов. Ид чанка - это CRC32 от имени файла конфига Внутри чанка первый байт - аттрибуты архива, битовое поле. В scripts.bin встречаются следующие маски: enum { ATTR_EDITOR = 1,///значит что в конфиге будут указываться название и тип параметров ATTR_UNKNOWN = 2,///встречается вроде только в одном конфиге language_type.bin ATTR_DICTIONARY = 4,///Строки вынесены в отдельный словарь и в конфиге вместо строки указывается индекс строки в словаре ///в конфиге тогда создаются 2 чанка: чанк 1 - в нем конфиг, чанк 2 - словарь ///формат чанка 2: количество строк в словаре, потом сами строчки }; Большинство файлов имеет аттрибуты ATTR_EDITOR | ATTR_DICTIONARY. Они и лежат разобранные в архиве в конфигах с этими аттрибутами последовательно уложены структуры: struct { int idxName;//индекс названия параметра int idxType;//индекс названия типа //значение параметра - зависит от типа } Также иногда встречаются секции. Их я определял по тому что у очередного поля индекс названия выходил за границы словаря. Тогда считал это секцией. Секции представлены ввиде чанков, внутри которых уложены параметры. Ид чанка - CRC32 от имени секции. в начале секции один байт - аттрибуты ну и кстати есть разобранный textures.bin Сообщение отредактировал Deimos - 20.04.2010, 07:33 |
 
|
|
Текстовая версия | Сейчас: 04.05.2024, 14:31 |