Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вскрытие ресурсов Метро 2033
GAMEINATOR forums > Общие разделы > Создание и модификация игр. Геймдев.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
Kolmogor
Цитата(surfer @ 29.03.2010, 22:48) *
Я расковырял формат модели .model, я - инсайдер biggrin.gif

не похож ты на инсайдера tongue.gif
Цитата
96-й байт от начала

Правильнее оперировать не смещениями от начала, а чанками(блоками)
Тогда
Цитата
после нее какое-то четырехбайтовое поле, а после 4 байта - содержащие размер вертексного буффера

превратиться в чанк с вертексным буффером, а какое-то четырехбайтовое поле - станет идентификатором чанка
surfer
Хех, работает smile.gif


Маска, была обнаружена в файле lib_dead_body.model
Скиф
Тоесть уже можно вытащить в Макс модели игры со скелетом и прочими атрибутами?
BAC9-FLCL
Цитата(Скиф @ 30.03.2010, 06:59) *
Тоесть уже можно вытащить в Макс модели игры со скелетом и прочими атрибутами?

Нет.
VEN0M
да и без скелета пока что подойдёт если модельки в сталкер перетаскивать smile.gif
surfer
Нехорошо это, имхо, модели выдергивать пока не будем, по крайней мере до выхода или невыхода сдк Метро 2033. Вот если он не выйдет в итоге, тогда дернем smile.gif
[SОC]
surfer, по всей логике СДК будет поддерживать только импорт в форматы самой игры, никак не в обратную сторону (вспомним логику ПЫС, откуда вышли 4А). Да и раз поддержки все равно нет (даром, что название компании-родителя поменялось), отчего тянуть? Свободная фанатская программа, вот так-то.
VEN0M
Цитата
Нехорошо это, имхо, модели выдергивать пока не будем, по крайней мере до выхода или невыхода сдк Метро 2033. Вот если он не выйдет в итоге, тогда дернем smile.gif

гдето слышал что не раньше аддона выйдет, так что долговато ждать smile.gif
Цитата
surfer, по всей логике СДК будет поддерживать только импорт в форматы самой игры, никак не в обратную сторону (вспомним логику ПЫС, откуда вышли 4А). Да и раз поддержки все равно нет (даром, что название компании-родителя поменялось), отчего тянуть? Свободная фанатская программа, вот так-то.

согласен smile.gif
да и кто нибудь другой к тому времени уже наверное сделает, так что лучше не тянуть smile.gif wink_old.gif
Veresk
Цитата(surfer @ 30.03.2010, 14:07) *
Нехорошо это, имхо, модели выдергивать пока не будем, по крайней мере до выхода или невыхода сдк Метро 2033

извините, но это бред. Вся статика и без вашей утилиты выдергивается, остались только неписи и монстры. А вы пай-девочку строите (уж извините за откровенность и некоторую некультурность)
Veresk
тот же самый противогаз без особого шаманства (со вторым слоем на стекле с кровушкой)


так что смысла в "Нехорошо это" нету никакого
VEN0M
Цитата
тот же самы противогаз без особого шаманства (со вторым слоем на стекле с кровушкой)

ооо дай ссыль smile.gif
kalinin11
VENOM :
в шапке ищи метод с 3д риппером, затем действуй по инструкции.
VEN0M
kalinin11, что бы им воспользоваться нужно запустить игру а её я никак не запущу так как видюха моя имеет первые шейдеры а метро требует третьи smile.gif
Deimos
surfer, молодец, доделывай и выкладывай скрипт на модели.

Это уже достижение.
surfer


Цитата(Deimos @ 30.03.2010, 19:35) *
доделывай и выкладывай скрипт на модели.

Плагин надо писать для 3DS, сейчас пользуюсь на скорую руку написанной прогой для конвертации в формат Ogre .mesh

Цитата(VEN0M @ 30.03.2010, 14:18) *
кто нибудь другой к тому времени уже наверное сделает

Да я в принципе не против smile.gif
Deimos
Цитата(surfer @ 30.03.2010, 18:45) *
Плагин надо писать для 3DS, сейчас пользуюсь на скорую руку написанной прогой для конвертации в формат Ogre .mesh

Макс-скрипт вроде похож на эти КвикБМСы.
Цитата
Да я в принципе не против smile.gif

Но но но. smile.gif *угрожающе водит пальце в воздухе*
iOrange
Здравствуйте всем.

Я новенький на вашем форуме, вот прошел игру и начал тоже в ней копаться, так и вышел на ваш форум.
Вопщем surfer'у спасибо за инфу, только она верна лишь для небольшого количества моделей, у остальных смещения не те, копаю в эту сторону. Попутно пишу импортер в 3DS Max.

Вот первые скрины.




Ага - файл все-таки чанковый, так же похоже что в каждом файле модели хранятся также и лоды.

Все, с форматом вроде бы разобрался. Все довольно просто, вечером приду с работы - продолжу работу (там еще есть какая-то геометрия, просто хочу спать, поэтому буду разбираться вечером после работы).

Скрин с импортированой бабкой (content\meshes\static\babka\sdf.model)


для нетерпеливых - вот очень ранняя версия плагина (под 2010-й макс 32-бита), в принципе импортирует любую статику (см. аттач)

Всем спасибо, пошел спать (утром на работу)
Veresk
просто ШАЙТАН blink.gif

Спасибо за импортер, но если можно сделайте его ещё для 2009 макса. 2010 ну просто жутко ненравится своей гламурностью.

Кстати, а никто не пробовал расковырять формат моделей игры You are Empty, там тоже есть на что посмотерть (я уж неговорю про архитектуру)
http://www.playerzblog.com/wp-content/big_s_57.jpg
http://www.3dnews.ru/documents/12791/yae.jpg
http://www.fpsteam.it/img2005/YouAreEmpty/...re_empty_09.jpg
iOrange
Цитата(Veresk @ 31.03.2010, 06:56) *
Спасибо за импортер, но если можно сделайте его ещё для 2009 макса. 2010 ну просто жутко ненравится своей гламурностью.

Да не вопрос - прикрепил в аттаче (для 3DS Max 2009 32-бита)

Сегодня вечером постараюсь как можно больше доделать импорт, и тогда же выложу с исходниками.

Нажмите для просмотра прикрепленного файла
surfer
Вау, внезапно )))

Цитата(iOrange @ 31.03.2010, 01:43) *
она верна лишь для небольшого количества моделей, у остальных смещения не те

Нет, формат один для всех статических моделей, но есть еще файлы .mesh, там формат отличается
Цитата(iOrange @ 31.03.2010, 01:43) *
файл все-таки чанковый, так же похоже что в каждом файле модели хранятся также и лоды.

Файл состоит из нескольких сеток, например в файле lib_dead_body.model кроме маски еще 3 сетки есть, среди них дохлое тело должно быть.

вот часть исходного кода моего плагина
формат файла

Код
#ifndef __MODELFORMAT_H__
#define __MODELFORMAT_H__

typedef struct
{
    float x, y, z, w;            // координаты вершины
    unsigned a, b;                // наверное diffuse и specular
    float u, v;                    // текстурные координаты
}    VERTEX_FORMAT;

typedef unsigned short INDEX_FORMAT;

typedef struct
{
    unsigned chunkId;            // идентификатор, всегда = 3
    unsigned vbsize;            // размер вертексного буфера
    unsigned unknown1;            // всегда = 2
    unsigned vcount;            // кол-во вертексов
}    VERTICES_CHUNK_HEADER;

typedef struct
{
    unsigned chunkId;            // идентификатор, всегда = 4
    unsigned ibsize;            // размер индексного буфера
    unsigned nindices;            // число индексов
}    INDICES_CHUNK_HEADER;

typedef struct
{
    unsigned chunkId;            // номер блока
    unsigned chunkSize;            // размер блока
    unsigned modelNum;            // порядковый номер модели
    unsigned length1;            // длина строки, всегда 64 байта
    char stringData[64];        // строка (crc32) ?
    unsigned unknown1;            // всегда = 2
    unsigned length2;            // длина строки
    char stringArray[1];        // название текстуры, материала, модели
}    STATIC_MODEL_CHUNK_HEADER;

typedef struct
{
    unsigned fileId;            // идентификатор
    unsigned fileSize;            // размер файла
}    STATIC_MODEL_FILE_HEADER;

#endif // __MODELFORMAT_H__



sceneimport.h

Код
#ifndef __SCENEIMPORT_H__
#define __SCENEIMPORT_H__

#include <Max.h>
#include <sstream>

class CSceneImport : public SceneImport
{
public:
    CSceneImport();

    ~CSceneImport();

    int ExtCount();

    BOOL SupportsOptions(int  ext, DWORD  options );

    const char* Ext(int n);

    const char* LongDesc();

    const char* ShortDesc();

    const char* AuthorName();

    const char* CopyrightMessage();

    const char* OtherMessage1();

    const char* OtherMessage2();

    unsigned int Version();

    void ShowAbout(HWND hWnd);

    void loadModel( const char* name );

    void unloadModel();

    int DoImport(const char* pszName, ImpInterface* pImpInterface, Interface* pInterface, BOOL bPrompts = FALSE );

private:
    std::stringstream mStream;

}; // CSceneImport

#endif // __SCENEIMPORT_H__



sceneimport.cpp

Код
#include <SceneImport.h>
#include <fstream>
#include <exception>
#include <locale>
#include <ModelFormat.h>

CSceneImport::CSceneImport()
{
}

CSceneImport::~CSceneImport()
{
    unloadModel();
}

int CSceneImport::ExtCount()
{
    return 1;
}

BOOL CSceneImport::SupportsOptions(int  ext, DWORD  options )
{
    return 0;
}

const char* CSceneImport::Ext(int n)
{
    return "model";
}

const char* CSceneImport::LongDesc()
{
    return "";
}

const char* CSceneImport::ShortDesc()
{
    return "";
}

const char* CSceneImport::AuthorName()
{
    return "";
}

const char* CSceneImport::CopyrightMessage()
{
    return "";
}

const char* CSceneImport::OtherMessage1()
{
    return "";
}

const char* CSceneImport::OtherMessage2()
{
    return "";
}

unsigned int CSceneImport::Version()
{
    return 100;
}

void CSceneImport::ShowAbout(HWND hWnd)
{
}

void CSceneImport::loadModel( const char* model )
{
    std::ifstream source;
    unsigned length;
    char *buffer;

    source.open( model, std::ios::binary );
    if( source.good() == 0 )
    {
        throw std::exception( "File not found" );
    }

    source.seekg( 0, std::ios::end );
    length = source.tellg();
    source.seekg( 0, std::ios::beg );

    buffer = new char[length];
    source.read( buffer, length );

    mStream.write( buffer, length );

    delete buffer;
    source.close();
}

void CSceneImport::unloadModel()
{
    mStream.clear();
}

int CSceneImport::DoImport(const char* pszName, ImpInterface* pImpInterface, Interface* pInterface, BOOL bPrompts )
{
    try
    {
        STATIC_MODEL_FILE_HEADER fileHeader;
        STATIC_MODEL_CHUNK_HEADER chunkHeader;
        INDICES_CHUNK_HEADER indicesHeader;
        VERTICES_CHUNK_HEADER verticesHeader;
        VERTEX_FORMAT* vertices;
        INDEX_FORMAT* indices;

        unsigned filePtr;

        setlocale( LC_ALL, ".1251" );

        loadModel( pszName );

        filePtr = sizeof(STATIC_MODEL_FILE_HEADER);
        mStream.read( reinterpret_cast<char*>(&fileHeader), filePtr );

        while( filePtr < fileHeader.fileSize )
        {
            mStream.read( reinterpret_cast<char*>(&chunkHeader), sizeof(STATIC_MODEL_CHUNK_HEADER) );
            mStream.seekg( chunkHeader.length2-4, std::ios::cur );
            mStream.read( reinterpret_cast<char*>(&verticesHeader), sizeof(VERTICES_CHUNK_HEADER) );

            vertices = new VERTEX_FORMAT[verticesHeader.vcount];
            mStream.read( reinterpret_cast<char*>(vertices), verticesHeader.vbsize-8 );

            mStream.read( reinterpret_cast<char*>(&indicesHeader), sizeof(INDICES_CHUNK_HEADER) );

            indices = new INDEX_FORMAT[indicesHeader.nindices];
            mStream.read( reinterpret_cast<char*>(indices), indicesHeader.ibsize );

            ImpNode* node = pImpInterface->CreateNode();
            node->SetName( "test" );

            TriObject* obj = CreateNewTriObject();

            // ...

            node->Reference( obj );

            pImpInterface->AddNodeToScene( node );

            delete indices;
            delete vertices;

            filePtr += chunkHeader.chunkSize;
        }

        unloadModel();

        return IMPEXP_SUCCESS;
    }
    catch( ... )
    {
        return 0;
    }
}



Правка, хотя, да, есть файлы у которых id = 9, а есть такие у которых = 1, они немного отличаются.
iOrange
Цитата(surfer @ 31.03.2010, 14:57) *
Вау, внезапно )))


Привет ))

Да, как и говорил исходники будут вечером.
А формат простой - чанк с 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);
}

f6677
Суепр ! iOrange Сделай пожалуйста для 3D max 9

У меня не получается извлечь модели с помощью 3D Ripper DX
Когда я нажимаю на запись то игра сначала подвисает (так и должно быть) но потом вылетает...
А когда я в максе открываю то что программа "сфоткала" , я вижу пустое место.
Все настройки я сделал.
У меня стоит Win7 может из-за этого не работать ?
[SОC]
iOrange, bravo7kg.gif
Вы не планируете сделать аналогичный импорт для Maya?
Panisher
f6677
Вот,качай.

Ещё б для 8-го макса rolleyes.gif
Kolmogor
Давайте меряться списком чанков в моделях smile.gif
У меня такой:
Ид чанка
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. А внутри каждого чанка модель, которую надо разбирать сначала smile.gif

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 - внутри строка
iOrange
Привет всем smile.gif

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>
[SОC]
iOrange,
Планы впечатляют.
Я использую Maya 8.5.
VEN0M
Цитата
Привет всем smile.gif

здаров smile.gif
Цитата
так список "максов" - 3DSMax 2009, 3DSMax 9, 3DSMax 8

ну из максов можно ещё на десятый добить, ну а на версии раньше восьмой делать бессмысленно smile.gif
kutuzvden
На 2008 забабахай
surfer
Похвастаюсь и я своим плагином )))

Жмур полностью




У некоторых элементов жмура вершины индексируются в обратном порядке, из-за чего поверхность выворачивается наизнанку, а у некоторых норм. Как с этим бороться?
Kolmogor
1 апреля наступило smile.gif
вот содержимое scripts.bin http://webfile.ru/4397762
с именами файлов только пока проблема smile.gif
surfer
Цитата(Kolmogor @ 01.04.2010, 00:35) *
вот содержимое scripts.bin http://webfile.ru/4397762

Ого!


Наверное это LOD'ы были =\
Kolmogor
неее, он состоит из чанков, у которых ИД это СRС32 от имени файла
какие-то имена файлов нашлись, а остальные нет smile.gif
surfer
Kolmogor, понятно. smile.gif
Я про модель, у лодов полики почему-то в обратную сторону развернуты, на первом скрине они есть, на втором удалены.
surfer
Блин, до меня доехало что это такое ))) Это невидимые в игре элементы на трупе, при наведении на которые прицела, можно снимать аптечки всякие, патроны с трупа, а полигоны внутрь смотрят, чтобы их не видно было в игре ))
HikeR
Цитата(Kolmogor @ 01.04.2010, 00:35) *
вот содержимое scripts.bin ... с именами файлов только пока проблема

форматом не поделишься? может и с именами поможем чем-нить.

а вобще получается, что конфиги у нас открытые, а скрипты компилированные, и все заявления разрабов что они использовали Lua только при разработке (мол движок с Lua-скриптами будет сильно жручий и неподъемный) - мягко говоря неправда.
в сталкере скрипты компилировались перед запуском, здесь же этот этап пропущен, но особой разницы нет.

да, похоже наступает эра "Real Weapon Сharacteristics" модов ;) правда предсказанный мной ранее "Real Weapon Sound" так до сих пор и не появился, поэтому может я ошибаюсь ;)
surfer
HikeR, это вероятно в целях экономии памяти сделано, разного рода компиляторы требовательны к памяти, а разработчики игру в память х-ящика старались уплотнить.

З.Ы. Вот после этого я консольщиков еще больше не люблю. dry.gif
Veresk
surfer, похоже что чёрное на твоей модели, это часть (верхний слой) модели с прозрачной текстурой (кровь в игре).


т.е. удалять этот слой при импорте нельзя! (это я так, на всякий случай)

Цитата(HikeR @ 01.04.2010, 02:51) *
да, похоже наступает эра "Real Weapon Сharacteristics" модов wink.gif правда предсказанный мной ранее "Real Weapon Sound" так до сих пор и не появился, поэтому может я ошибаюсь wink.gif

а обратный процесс работает (запаковки в бин) или конфиги будут прям напрямую подхватываться?
думаю просто, что весь интузиазм по модингу метра собрался на этом сайте laugh.gif По большому счёту модить линейную паруразпроходную игру не особо интересно
iOrange
дописал плагин - теперь правильно импортит статику.

Картина Репина "Труп смотрит телевизор" ))


Плагин собран под:
3DS Max 2010 32-bit
3DS Max 2009 32-bit
3DS Max 2008 32-bit
3DS Max 9 32-bit

надеюсь никого не забыл

ЗЫ. Под майку работаю, надеюсь скоро будет

Kolmogor
Цитата(HikeR @ 01.04.2010, 03:51) *
а вобще получается, что конфиги у нас открытые, а скрипты компилированные, и все заявления разрабов что они использовали 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. Они и лежат разобранные в архиве smile.gif
в конфигах с этими аттрибутами последовательно уложены структуры:
struct
{
int idxName;//индекс названия параметра
int idxType;//индекс названия типа
//значение параметра - зависит от типа
}
Также иногда встречаются секции. Их я определял по тому что у очередного поля индекс названия выходил за границы словаря. Тогда считал это секцией. Секции представлены ввиде чанков, внутри которых уложены параметры. Ид чанка - CRC32 от имени секции. в начале секции один байт - аттрибуты

ну и кстати smile.gif есть разобранный textures.bin
VEN0M
iOrange, спасибо за плагины smile.gif
Lance
Забавный, сижу играюсь.
VEN0M
на восьмой забыл smile.gif
kiperenok
Цитата(iOrange @ 01.04.2010, 07:49) *
дописал плагин - теперь правильно импортит статику.

Картина Репина "Труп смотрит телевизор" ))


Плагин собран под:
3DS Max 2010 32-bit
3DS Max 2009 32-bit
3DS Max 2008 32-bit
3DS Max 9 32-bit

надеюсь никого не забыл

ЗЫ. Под майку работаю, надеюсь скоро будет

Меня зыбыл sad.gif У меня 8 х32, и 9 х64 - получается ни 1, ни на 2. Сделай плиз на 9 х64.
iOrange
Цитата(VEN0M)
на восьмой забыл smile.gif

Цитата(kiperenok)
Меня зыбыл sad.gif У меня 8 х32, и 9 х64 - получается ни 1, ни на 2. Сделай плиз на 9 х64.


ой, извините, не выспался, сегодня вечером после работы соберу под 8-й макс и под 9-й x64
так же постараюсь что-то решить с материалами
shnaket
Эх, родные ltx в скриптах. Kolmogor, а обратный компилятор будешь делать?
f6677
(( у меня в максе пишет - неподходящий формат файла
(3ds max 9)

Хотя уже впринцепе всё , я щас 2010 установлю

Пользуемся кнопкой Edit, а не клепаем посты.
surfer
В .mesh похоже вертексные данные чем-то закриптованы wink_old.gif
HikeR
кстати, а для чего нужны разные версии плагина под разные максы? созданный для самой младшей версии не читается в более старших? если так, то это изврат со стороны разрабов макса, слова "обратная совместимость" ничего не значат...
Цитата(Kolmogor @ 01.04.2010, 10:34) *
скриптов в ресурсах по-моему вообще нет, так что слова "про ЛУА только для разработки" наоборот похожи на правду

стеснительные разрабы не положили файлика наподобие license.txt с перечислением всех используемых лицензий (хотя на Theora и Ogg в обязательном порядке должны были выложить, даже если обладают коммерческой лицензией), поэтому гадать можно долго. но все эти оставшиеся бины действительно похожи на компилированные скрипты.
CryKitten
Цитата(HikeR @ 01.04.2010, 18:41) *
стеснительные разрабы не положили файлика наподобие license.txt с перечислением всех используемых лицензий (хотя на Theora и Ogg в обязательном порядке должны были выложить, даже если обладают коммерческой лицензией), поэтому гадать можно долго.

В "Метро 2033"? Перечисление есть в самой игре, в "авторах", если их до конца досмотреть. И на физикс, и на огг, и на патфайндинг.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.