Перейти в начало страницы

Здравствуйте, гость ( Авторизация | Регистрация )

Gameru.net останавливает работу в связи с вторжением армии РФ в Украину. Следите за дальнейшими анонсами.
Support Gameru!
> MetroEX - универсальный инструмент для работы с ресурсами игр серии Метро
iOrange
сообщение 22.02.2019, 19:21
Сообщение #181
BFG9000 owner

Половина землекопа
**************

Репутация:   247  
Куратор темы
Сообщений: 1813
Регистрация: 30.03.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа




Комплексная программа для работы с ресурсами игр серии Metro (+ Arktika.1) от iOrange - MetroEX
http://s.gameru.net/metro/MetroEX_v047.zip
Github репозиторий - временно недоступен

Чейнджлог по версиям:
MetroEX v0.3

1) Исправлен зум моделей колесиком мышки на Windows 7/8 (автор - abramcumner)
2) Добавлена фильтрация дерева файлов (автор - slik)
3) Известные типы файлов теперь отображаются со своими иконками (автор - Shoker)
4) config.bin теперь можно раскрыть и просматривать / извлекать файлы находящиеся в нем (автор - Shoker)
5) Добавлена инфо-панель для текстур и моделей, которая показывает полезную информацию о выбранном файле
6) Экспорт модели вместе с ее анимациями в FBX! *
7) Возможность просмотра анимаций прямо в программе (данный функционал не до конца доработан, учтите)

* При единичном экспорте в FBX модель всегда экспортируется с анимациями. При пакетном извлечении можно отключить экспорт анимаций.
Экспорт с анимациями может занять некоторое время. Я постараюсь оптимизировать это, но похоже что проблема в FBX SDK.



Так выглядит проигрывание анимации в программе:


А так выглядит результат экспорта открытый в 3Ds Max:


MetroEX v0.4

были добавлены доп. опции экспорта в FBX:
* Export animations - определяет нужно ли вообще экспортировать анимации. Полезно если вам просто нужна модель в FBX, без анимаций
* Animations to separate files - имеет смысл только в паре с предыдущей опцией, и при включении будет экспортировать анимационные треки в отдельные FBX файлы. Т.е. на выходе будет FBX файл с моделью и скелетом, и рядом с ним FBX файлы, по одному на анимацию. Попытка экспорта моделей с 11,000 анимаций все равно займет прилично времени, но при этом памяти будет потребляться не много, и даже при сбое - у вас останутся те файлы, что успели записаться.

[1] Был доработан немного 3D просмотрщик моделей - теперь реализована "правильная" Arcball камера, так что вращать и рассматривать модели стало удобнее.
Так же был добавлен режим отображения сетки полигонов поверх модели.

[2] Добавлено окно отображения свойств модели. Там отображена вся информация о модели. Есть даже информация о том, кто и на каком компьютере создал эту модель, и имя оригинального файла.

[3] Добавлено окно отображения свойств текстур, находящихся в текстурной базе. Полезно тем, что вы можете найти там дополнительные текстуры, которые на данный момент не экспортирует программа (бамп, детали...)

[4] Добавлено окно настроек программы, настройки сохраняются в файл рядом в папку с программой. Пока там только настройки экспорта, но в будущем туда будут добавляться / выноситься больше настроек.

[5] Реализована заргузка, отображение, и экспорт локализационных файлов. Экспорт производится в формат Excel 2003.

[6] Добавлено меню инструментов, содержащее следующие тулзы:
- [7] Конвертер текстур в формат Metro Exodus. Умеет конвертировать как одиночный файл, так и папку (с подпапками).
- Конвертер локализационных файлов из формата Excel 2003 назад в формат Metro Exodus.
- [8] Злополучная утилита для создания патч-архивов. Указываете где лежит папка content, куда сохранять результирующий архив, и жмете кнопку. Остально за вас сделает программа.

Так же было переписано много кода, решались организационные вопросы, велись работы по функционалу, который войдет в v0.5, но об этом будет позже.

Дальше прикладываю скриншоты к отмеченным изменениям:
screenshots here

[1] Wireframe mode


[2] Model properties


[3] Textures database viewer


[4] Settings window


[5] Localization files support


[6] Tools menu


[7] Textures converter


[8] Archives tool



MetroEX v0.41

В версии MetroEX v0.41 добавлены опции экспорта моделей


Так же добавлена кнопка на панели для включения / выключения показа колизии (если таковая есть).
примеры

Включено:


Выключено:


Ну и злополучные деревья, кстати. Помню кто-то в этой теме на них жаловался.
Включено:


Выключено:



Ну и по традиции - небольшой бонус - теперь зажав правую кнопку мышки можно перемещать модель.
Так же на панели инструментов появилась кнопка сброса камеры, для удобства.

MetroEX v0.42

* Исправлен экспорт единичной модели в FBX (не всегда правильно реагировала на настройки)
+ Добавлена поддержка текстур и моделей Redux версий Метро (просмотр + экспорт)

MetroEX v0.45

+ Добавлена возможность модификации игровых архивов
+ Добавлено чтение шрифтовой базы
* Исправлена конвертация игровых локализаций назад в формат игры

MetroEX v0.45a

+ Переписана файловая система, теперь можно указать папку с игрой, и будут загружены абсолютно все игровые паки, включая патчи и ДЛЦ. Новые файлы будут заменять собой старые, так же как это делает игра.
+ Добавлен функционал экспорта набора текстур описывающих "поверхность" (альбедо, "бамп", карта нормалей, карта деталей)
+ Добавлена опция экспорта моделей для экспорта всех текстур "поверхности"








MetroEX v0.46

+ Добавлена возможность сохранить отдельную анимацию (by SkyLoader)
+ Добавлено отображение и экспортирование лодов у модели (если таковые имеются) (by SkyLoader)
+ Инструмент "Textures converter" был доработан и теперь может создавать текстуры для предыдущих версий Metro (обычные и Redux)
+ Сильно переработана подсистема чтения/записи игровых ресурсов (больше задел на будущее, но уже дает свои плоды)
+ Доработана файловая система (ФС). Теперь ФС правильно обрабатывает дубликаты файлов, а так же поддерживает архивы вплоть до последнего DLC.
+ Написан код позволяющий заменять файлы в файле config.bin, и сохранять измененный config.bin.
+ Добавлен инструмент для редактирования/замены/проверки шрифтов.







MetroEX v0.46a

* Исправлена загрузка всех архивов из папки игры (было поломано для старых версий игры)
* Улучшено качество отрисовки шрифтов в Font Preview.


MetroEX v0.47

+ Добавлена поддержка всех версий игр Metro и Arktika.1
* Исправлен просмотр анимаций
* Исправлен экспорт в OBJ (была неправильная настройка материалов)
* Улучшения стабильности


Программа предназначена только для личного пользования в ознакомительных целях!
Распространение извлеченных файлов и их содержимого за пределы вашего личного ПК - нарушение лицензионного соглашения.
Автор программы не несет ответственности за прямой или косвенный ущерб причиненный в результате неправомерного использования программы.


Дополнительный/алтернативный софт:

Программа для конвертирования текстур любых версий Метро от iOrange - MetroTC
http://s.gameru.net/metro/MetroTC.zip
Github репозиторий - https://github.com/iOrange/MetroTC
Описание

Встречайте MetroTC - комбайн-конвертер любых текстур всех версий Метро в одном флаконе.
Ваша задача - указать где лежат текстуры (или одна текстура) и дать команду "Convert!", и программа сама найдет в указанном месте все текстуры Метро, обработает, и выдаст DDS читаемый любыми редакторами и утилитами.

Отличительные особенности:
1) Поддержка всех версий игр серии Метро
2) Текстуры 512/1024/2048 (если присутствуют) собираются в один DDS со всем мипмапами и правильными свойствами
3) Программа умеет определять что текстура уже была сконвертированна, и потому ее можно "натравливать" на папки с частично конвертированными текстурами
4) Эксклюзив для Gameru.net rolleyes.gif
5) Программа залита на сайт gameru.net, а потому ссылка не умрет cool.gif




Распаковщик архивов Metro Exodus от abramcumner
https://yadi.sk/d/XhCjq0wVK_oAsQ

Конвертер для текстур эксодуса в .dds от Prodnik
https://yadi.sk/d/G1xL2FcYE4FlxQ


--------------------
Hello worlds!
Перейти в начало страницы
 
43 страниц V  « < 8 9 10 11 12 > »   
Начать новую тему
Ответов
Cartoteka
сообщение 03.03.2019, 22:54
Сообщение #182


Заслуженный Мастер Игры
*************

Репутация:   267  
Группа: Участник
Сообщений: 1524
Награды: 4
Регистрация: 10.11.2013




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(DaaGuda @ 03.03.2019, 22:52) *
Попадается много моделей с назначенными текстурами которых нет вообще в игре.



Можешь скинуть скрины посмотреть? Может, в DLC будут?


--------------------
Перейти в начало страницы
 
DaaGuda
сообщение 03.03.2019, 22:57
Сообщение #183


Опытный Игрок
****

Репутация:   5  
Группа: Участник
Сообщений: 53
Регистрация: 05.02.2017




Вставить ник Цитировать выделенное в форуму быстрого ответа


Cartoteka, есть папки с моделями подписанные по типу "dlc_han_story" и т.д (upd/ это с ll осталось). Если опят попадётся, сделаю скрины. Просто не запоминал какие модели.

Сообщение отредактировал DaaGuda - 03.03.2019, 23:03


--------------------
Перейти в начало страницы
 
qvvxvvq
сообщение 03.03.2019, 23:00
Сообщение #184


Новичок
*

Репутация:   0  
Группа: Участник
Сообщений: 7
Регистрация: 23.12.2017




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Cartoteka @ 03.03.2019, 22:54) *
Цитата(DaaGuda @ 03.03.2019, 22:52) *
Попадается много моделей с назначенными текстурами которых нет вообще в игре.



Можешь скинуть скрины посмотреть? Может, в DLC будут?

Скорее всего он имеет виду немного иное, к примеру у одной модели есть текстура "trees_brunch_alpha", а у другой модели есть текстура "trees_brunch_alpha_broken", которой в файлах вообще нету, но текстура "trees_brunch_alpha" подойдет ко второй модели, что-то подобное есть в СДК нашем, где можно просто поменять цвет без фотошопа. Думаю я понятно разъяснил
Перейти в начало страницы
 
Modera
сообщение 03.03.2019, 23:08
Сообщение #185


.
**********************

Репутация:   750  
Группа: Участник
Сообщений: 7072
Награды: 4
Регистрация: 30.07.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(DaaGuda @ 03.03.2019, 22:52) *
Попадается много моделей с назначенными текстурами которых нет вообще в игре. Интересно однако...

Это потому что в модели хранится не имя текстуры в папке с текстурами, а имя конфига в textures_handles_storage.bin, в котором уже указывается настоящее имя текстуры. Имя текстуры иногда совпадает с именем конфига и часть текстур успешно открывается. smartass.gif
Перейти в начало страницы
 
iOrange
сообщение 03.03.2019, 23:18
Сообщение #186
BFG9000 owner

Половина землекопа
**************

Репутация:   247  
Куратор темы
Сообщений: 1813
Регистрация: 30.03.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Modera @ 03.03.2019, 21:54) *
iOrange, уже точно не помню как к этому пришел

Блин, а ведь действительно. Вот я маху дал. Они же когда кости сетапят, смещение делят на 0x90, при том что размер кости - 0x30.
Спасибо за подсказку!

Цитата(Modera @ 03.03.2019, 22:08) *
Это потому что в модели хранится не имя текстуры в папке с текстурами, а имя конфига в textures_handles_storage.bin, в котором уже указывается настоящее имя текстуры

Спасибо, загляну туда.


--------------------
Hello worlds!
Перейти в начало страницы
 
DaaGuda
сообщение 03.03.2019, 23:44
Сообщение #187


Опытный Игрок
****

Репутация:   5  
Группа: Участник
Сообщений: 53
Регистрация: 05.02.2017




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(iOrange @ 03.03.2019, 23:18) *
Спасибо, загляну туда.

Было бы неплохо.


--------------------
Перейти в начало страницы
 
autistic
сообщение 04.03.2019, 02:37
Сообщение #188


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Похукал ф-ию открытия файлов MetroExodus.exe. Вроде работает, но толком не проверил т.к. все файловые дескрипторы открываются еще до появления окна отрисовки.
Для всех кто интересуется этой темой делюсь наработками:
Исходный код приложения, которое инжектит код
Код
#include <algorithm>
#include <cassert>
#include <cstdio>
#include <iostream>

#include <Windows.h>
#include <psapi.h>
#include <shlwapi.h>
#include <tlhelp32.h>

#pragma comment(lib, "Shlwapi.lib")

enum ErrorCodes
{
    ERROR_LOAD_LIBRARY = -3,
    ERROR_OPEN_PROCESS = -2,
    ERROR_DEBUG_PRIVILEGE = -1,
    ERROR_SUCCEEDED = 0
};

struct HandleHolder
{
    HandleHolder() : handle() {}
    HandleHolder(HANDLE handle) : handle(handle) {}
    HandleHolder(const HandleHolder &) = delete;
    HandleHolder(HandleHolder &&rhs) : handle(NULL) { std::swap(handle, rhs.handle); }
    ~HandleHolder() { CloseHandle(handle); }
    operator HANDLE() { return handle; }
    HandleHolder &operator = (const HandleHolder &) = delete;
    HandleHolder &operator = (HandleHolder &&rhs) { std::swap(handle, rhs.handle); }
    HANDLE handle;
};

struct VirtualAllocHolder
{
    VirtualAllocHolder(const VirtualAllocHolder &) = delete;
    VirtualAllocHolder(HANDLE process, LPVOID address) : process(process), address(address) {}
    ~VirtualAllocHolder() { VirtualFreeEx(process, address, 0, MEM_RELEASE);  }
    VirtualAllocHolder &operator = (const VirtualAllocHolder &) = delete;
    operator LPVOID() { return address; }
    HANDLE process;
    LPVOID address;
};

struct CmdLine
{
    CmdLine() { argv = CommandLineToArgvW(GetCommandLineW(), &argc); }
    INT GetArgumentCount() const { return argc; }
    LPCWSTR GetArgument(INT index) const { assert(index < argc); return argv[index]; }
    INT argc;
    LPWSTR *argv;
};

HandleHolder OpenProcess(LPCWSTR processName)
{
#define OPEN_PROCESS_ERROR() \
    do { \
        std::fwprintf(stderr, \
        L"Failed to open system process '%s' with error code '%d'", \
        processName, \
        GetLastError()); \
    } \
    while (0)

    HandleHolder snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (snapshot == INVALID_HANDLE_VALUE) {
        OPEN_PROCESS_ERROR();
        return NULL;
    }

    PROCESSENTRY32 processEntry;
    if (Process32First(snapshot, &processEntry) == FALSE) {
        if (GetLastError() != ERROR_NO_MORE_FILES)
            OPEN_PROCESS_ERROR();
        return NULL;
    }

    do {
        HandleHolder process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processEntry.th32ProcessID);
        if (process != NULL) {
            WCHAR imagePath[MAX_PATH];
            if (GetProcessImageFileNameW(process, imagePath, MAX_PATH) != 0) {
                LPCWSTR moduleName = PathFindFileNameW(imagePath);
                if (lstrcmpiW(processName, moduleName) == 0)
                    return process;
            }
        }
    }
    while (Process32Next(snapshot, &processEntry) != FALSE);

    return NULL;

# undef OPEN_PROCESS_ERROR
}

BOOL InjectDLL(HANDLE process, LPCWSTR libraryPath)
{
#define LOAD_LIBRARY_ERROR() \
    do { \
        std::fwprintf(stderr, \
        L"Failed to load library '%s' with error code '%d'", \
        libraryPath, \
        GetLastError()); \
    } \
    while (0)

    FARPROC startRoutine = GetProcAddress(GetModuleHandle("KERNEL32.DLL"), "LoadLibraryW");
    if (startRoutine == NULL) {
        LOAD_LIBRARY_ERROR();
        return FALSE;
    }

    CONST SIZE_T length = (lstrlenW(libraryPath) + 1) * sizeof(WCHAR);
    VirtualAllocHolder argument(process, VirtualAllocEx(process, NULL, length, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE));
    if (argument == NULL) {
        LOAD_LIBRARY_ERROR();
        return FALSE;
    }

    SIZE_T bytesWritten;
    if (WriteProcessMemory(process, argument, libraryPath, length, &bytesWritten) == FALSE) {
        LOAD_LIBRARY_ERROR();
        return FALSE;
    }

    HandleHolder remoteThread = CreateRemoteThread(process, NULL, 0, LPTHREAD_START_ROUTINE(startRoutine), argument, 0, NULL);
    if (remoteThread == NULL) {
        LOAD_LIBRARY_ERROR();
        return FALSE;
    }

    if (WaitForSingleObject(remoteThread, INFINITE) != WAIT_OBJECT_0)
        return FALSE;

    return TRUE;

#undef LOAD_LIBRARY_ERROR
}

BOOL SetDebugPrivilege(BOOL onoff)
{
#define SET_DEBUG_PRIVILEGE_ERROR() \
    do { \
        std::fwprintf(stderr, \
        L"Failed to set debug privilege with error code '%d'", \
        GetLastError()); \
    } \
    while (0)

    HandleHolder token;
    if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &token.handle) == FALSE) {
        SET_DEBUG_PRIVILEGE_ERROR();
        return FALSE;
    }

    LUID luid;
    if (LookupPrivilegeValueA(NULL, "SeDebugPrivilege", &luid) == FALSE) {
        SET_DEBUG_PRIVILEGE_ERROR();
        return FALSE;
    }

    TOKEN_PRIVILEGES privileges;
    privileges.PrivilegeCount = 1;
    privileges.Privileges[0].Luid = luid;
    privileges.Privileges[0].Attributes =
        (onoff) ? SE_PRIVILEGE_ENABLED : SE_PRIVILEGE_REMOVED;

    if (AdjustTokenPrivileges(token, FALSE, &privileges, 0, NULL, NULL) == FALSE) {
        SET_DEBUG_PRIVILEGE_ERROR();
        return FALSE;
    }

    return TRUE;

#undef SET_DEBUG_PRIVILEGE_ERROR
}

int main()
{
    CmdLine cmdLine;
    if (cmdLine.GetArgumentCount() != 3) {
        std::puts("USAGE: dllinject <process name> <DLL module full path>");
        return ERROR_SUCCEEDED;
    }

    if (SetDebugPrivilege(TRUE) == FALSE)
        return ERROR_DEBUG_PRIVILEGE;

    LPCWSTR processName = cmdLine.GetArgument(1);
    HandleHolder process = OpenProcess(processName);
    if (process == NULL)
        return ERROR_LOAD_LIBRARY;

    LPCWSTR dllPath = cmdLine.GetArgument(2);
    if (InjectDLL(process, dllPath) == FALSE)
        return ERROR_OPEN_PROCESS;

    return ERROR_SUCCEEDED;
}


Исходный код внедряемой DLL
Код
#define _CRT_SECURE_NO_WARNINGS

#include <fcntl.h>
#include <io.h>
#include <sys/stat.h>

#include <cstdlib>

#include <Windows.h>
#include <tlhelp32.h>

#define PROCESS_NAME "MetroExodus.exe"

struct ReaderData
{
    int FileDescriptor;
    long FilePointer;
    long FileLength;
};

BYTE *FindTargetFunctionAddress(BYTE *mem, INT length)
{
    CONST BYTE pattern[] =
    {
        '\x83', '\xEC', '\x20', '\x48', '\x89', '\xD6', '\x41', '\xF7',
        '\xD8', '\x48', '\x89', '\xCB', '\x48', '\x89', '\xF1', '\x19',
        '\xFF', '\x83', '\xE7', '\x20', '\x0F', '\xBA', '\xEF', '\x0F',
        '\x89', '\xFA', '\xFF', '\x15', '\xB4', '\xF9', '\x6A', '\x04',
        '\x89', '\x03', '\x83', '\xF8', '\xFF', '\x75', '\x35', '\xFF',
        '\x15', '\x1F', '\xF9', '\x6A', '\x04', '\x83', '\x38', '\x02',
    };

    INT i, j;
    CONST INT count = sizeof(pattern);
    for (i = 0; i <= length - count; ++i)
    {
        for (j = 0; j < count; ++j)
        {
            if (mem[i + j] != pattern[j])
            {
                break;
            }
        }

        if (j == count)
        {
            return mem + i;
        }
    }

    return NULL;
}

LPVOID GetTargetFunctionAddress()
{
    MODULEENTRY32 entry = MODULEENTRY32();
    entry.dwSize = sizeof(MODULEENTRY32);
    HANDLE hProcess = GetCurrentProcess();
    DWORD processId = GetProcessId(hProcess);
    HANDLE hModuleSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, processId);

    if (Module32First(hModuleSnapshot, &entry) == FALSE)
    {
        return NULL;
    }

    do
    {
        if (strcmp(entry.szModule, PROCESS_NAME) == 0)
        {
            return FindTargetFunctionAddress(entry.modBaseAddr, entry.modBaseSize);
        }
    }
    while (Module32Next(hModuleSnapshot, &entry) == TRUE);

    return NULL;
}

void Metro_OpenFile(ReaderData *reader, const char *path)
{
    int fd = _open(path, _O_BINARY, 0);
    if (fd == -1)
    {
        if (errno == ENOENT)
        {
            return;
        }

        Sleep(10);
        fd = _open(path, _O_BINARY, 0);
        if (fd == -1)
        {
            return;
        }
    }

    long length = _filelength(fd);
    if (length == -1)
    {
        _close(fd);
        return;
    }

    reader->FileDescriptor = fd;
    reader->FileLength = length;
}

BOOL SetHook(LPVOID address, LPVOID detour)
{
    DWORD oldProtection;
    CONST SIZE_T length = 32;
    CONST DWORD64 offset = reinterpret_cast<DWORD64>(detour) - reinterpret_cast<DWORD64>(address) - 9;

    if (VirtualProtect(address, length, PAGE_EXECUTE_READWRITE, &oldProtection) != TRUE)
    {
        return NULL;
    }

    memset(address, 0x90, length);
    CHAR *p = reinterpret_cast<CHAR*>(address);
    *reinterpret_cast<BYTE*>(p++) = 0xEB;
    *reinterpret_cast<DWORD64*>(p) = offset;

    VirtualProtect(address, length, oldProtection, &oldProtection);

    return TRUE;
}

INT RoutineItself(LPVOID)
{
    LPVOID detour = Metro_OpenFile;
    LPVOID target = GetTargetFunctionAddress();

    if (target == NULL)
    {
        std::abort();
    }

    if (SetHook(target, detour) == FALSE)
    {
        return ERROR_INVALID_FUNCTION;
    }

    return ERROR_SUCCESS;
}

bool StartRoutine()
{
    if (HANDLE hThread = CreateThread(NULL, 0, LPTHREAD_START_ROUTINE(RoutineItself), 0, 0, NULL))
    {
        return true;
    }

    return false;
}

BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    switch (fdwReason) {
    case DLL_PROCESS_DETACH:
        break;
    case DLL_PROCESS_ATTACH:
        if (!StartRoutine())
        {
            return FALSE;
        }
        break;
    case DLL_THREAD_ATTACH:
        break;
    case DLL_THREAD_DETACH:
        break;
    }

    return TRUE;
}


Хотя, что-то мне подсказывает, что с соглашением о вызове тут явно неладно. Непонятно как аргументы передаются, выглядит так словно через регистры.
Не будет это работать, короче.


Сообщение отредактировал autistic - 04.03.2019, 03:29


--------------------
nop
Перейти в начало страницы
 
iOrange
сообщение 04.03.2019, 05:36
Сообщение #189
BFG9000 owner

Половина землекопа
**************

Репутация:   247  
Куратор темы
Сообщений: 1813
Регистрация: 30.03.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(autistic @ 04.03.2019, 01:37) *
Хотя, что-то мне подсказывает, что с соглашением о вызове тут явно неладно. Непонятно как аргументы передаются, выглядит так словно через регистры.

Metro Exodus - скомпилирована в x64, а значит все вызовы - fastcall, первые 4 параметра через регистры (rcx, rdx, r8, r9), остальные - через стек.
Флоаты передаются через SSE регистры (xmm0, xmm1, xmm2, xmm3).


--------------------
Hello worlds!
Перейти в начало страницы
 
iOrange
сообщение 04.03.2019, 07:47
Сообщение #190
BFG9000 owner

Половина землекопа
**************

Репутация:   247  
Куратор темы
Сообщений: 1813
Регистрация: 30.03.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Делюсь промежуточными результатами - анимированные модели успешно экспортируются в FBX с костями и корректно зариганы.
Но вот при тестировании экспорта оказалось что более сложные модели (люди например) - у них скелеты составные, и внутри скелета могут быть ссылки на другие скелеты. С этим я еще разбираюсь, так что выход v0.29 все еще откладывается sad1.gif



Сообщение отредактировал iOrange - 04.03.2019, 07:48


--------------------
Hello worlds!
Перейти в начало страницы
 
shareware
сообщение 04.03.2019, 08:15
Сообщение #191


Новичок
*

Репутация:   0  
Группа: Участник
Сообщений: 3
Регистрация: 04.03.2019




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(iOrange @ 04.03.2019, 07:47) *
Делюсь промежуточными результатами - анимированные модели успешно экспортируются в FBX с костями и корректно зариганы.
Но вот при тестировании экспорта оказалось что более сложные модели (люди например) - у них скелеты составные, и внутри скелета могут быть ссылки на другие скелеты. С этим я еще разбираюсь, так что выход v0.29 все еще откладывается sad1.gif



А не могли бы вы выложить версию с доступным FBX экспортом ? Уж очень сильно жду этот вариант экспорта smile.gif
Перейти в начало страницы
 
autistic
сообщение 04.03.2019, 13:30
Сообщение #192


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(iOrange @ 04.03.2019, 07:36) *
Metro Exodus - скомпилирована в x64, а значит все вызовы - fastcall, первые 4 параметра через регистры

Тогда должно работать. Попробую тем же компилятором собрать которым игра собрана, чтоб c runtimes были одинаковые.


--------------------
nop
Перейти в начало страницы
 
qvvxvvq
сообщение 04.03.2019, 15:35
Сообщение #193


Новичок
*

Репутация:   0  
Группа: Участник
Сообщений: 7
Регистрация: 23.12.2017




Вставить ник Цитировать выделенное в форуму быстрого ответа


Может выложишь хоть 0.28?)

Сообщение отредактировал qvvxvvq - 04.03.2019, 15:46
Перейти в начало страницы
 
mmyr
сообщение 04.03.2019, 16:57
Сообщение #194


Почти Игрок
**

Репутация:   0  
Группа: Участник
Сообщений: 19
Регистрация: 27.12.2018




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(qvvxvvq @ 04.03.2019, 14:35) *
Может выложишь хоть 0.28?)


Может наберёшься терпения и немного подождёшь? Он это делает на чистом энтузиазме, за что ему огромное человеческое спасибо. Прояви уважение.
Перейти в начало страницы
 
qvvxvvq
сообщение 04.03.2019, 17:23
Сообщение #195


Новичок
*

Репутация:   0  
Группа: Участник
Сообщений: 7
Регистрация: 23.12.2017




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(mmyr @ 04.03.2019, 16:57) *
Цитата(qvvxvvq @ 04.03.2019, 14:35) *
Может выложишь хоть 0.28?)


Может наберёшься терпения и немного подождёшь? Он это делает на чистом энтузиазме, за что ему огромное человеческое спасибо. Прояви уважение.

Различай уважение и просьбу
P.S тут нет ни одного человека, который был бы не рад тому, что делает автор

Сообщение отредактировал qvvxvvq - 04.03.2019, 17:24
Перейти в начало страницы
 
iOrange
сообщение 04.03.2019, 17:57
Сообщение #196
BFG9000 owner

Половина землекопа
**************

Репутация:   247  
Куратор темы
Сообщений: 1813
Регистрация: 30.03.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(shareware @ 04.03.2019, 07:15) *
А не могли бы вы выложить версию с доступным FBX экспортом ? Уж очень сильно жду этот вариант экспорта

Цитата(qvvxvvq @ 04.03.2019, 14:35) *
Может выложишь хоть 0.28?)

Ок, вечером соберу что есть. Тем более что там есть исправления и улучшения.


--------------------
Hello worlds!
Перейти в начало страницы
 
shareware
сообщение 04.03.2019, 18:59
Сообщение #197


Новичок
*

Репутация:   0  
Группа: Участник
Сообщений: 3
Регистрация: 04.03.2019




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(iOrange @ 04.03.2019, 17:57) *
Цитата(shareware @ 04.03.2019, 07:15) *
А не могли бы вы выложить версию с доступным FBX экспортом ? Уж очень сильно жду этот вариант экспорта

Цитата(qvvxvvq @ 04.03.2019, 14:35) *
Может выложишь хоть 0.28?)

Ок, вечером соберу что есть. Тем более что там есть исправления и улучшения.

Большое спасибо )
Перейти в начало страницы
 
Yurii2033
сообщение 04.03.2019, 19:53
Сообщение #198


Новичок
*

Репутация:   0  
Группа: Участник
Сообщений: 3
Регистрация: 23.02.2019




Вставить ник Цитировать выделенное в форуму быстрого ответа


Спасибо! Буду очень ждать!

Перейти в начало страницы
 
waxtinoff
сообщение 04.03.2019, 21:05
Сообщение #199


Новичок
*

Репутация:   0  
Группа: Участник
Сообщений: 4
Регистрация: 20.03.2017




Вставить ник Цитировать выделенное в форуму быстрого ответа


iOrange, вопрос небольшой. Чисто теоретически, реально ли в ближайшем будущем сделать на основе твоего проекта полноценный инструмент для создания модов? Задумывался ли ты об подобном варианте развития своего проекта?
Будет ли допил для просмотра и экспорта ресурсов из предыдущих версий игры?

Сообщение отредактировал waxtinoff - 04.03.2019, 21:06
Перейти в начало страницы
 
iOrange
сообщение 04.03.2019, 22:14
Сообщение #200
BFG9000 owner

Половина землекопа
**************

Репутация:   247  
Куратор темы
Сообщений: 1813
Регистрация: 30.03.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(waxtinoff @ 04.03.2019, 20:05) *
Задумывался ли ты об подобном варианте развития своего проекта?

Да, как я и писал ранее - дальнейшая разработка будет вестись открыто на Github, любой желающий сможет участвовать.

Цитата(waxtinoff @ 04.03.2019, 20:05) *
Будет ли допил для просмотра и экспорта ресурсов из предыдущих версий игры?

Сомнительно.


--------------------
Hello worlds!
Перейти в начало страницы
 
Thekello
сообщение 05.03.2019, 08:11
Сообщение #201


Геймер
******

Репутация:   0  
Группа: Участник
Сообщений: 100
Регистрация: 02.03.2019




Вставить ник Цитировать выделенное в форуму быстрого ответа


Ребята, в какой папке находится поезд Аврора целиком и трупы?
Перейти в начало страницы
 

43 страниц V  « < 8 9 10 11 12 > » 
Тема закрытаНачать новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 29.03.2024, 18:10