MetroEX - универсальный инструмент для работы с ресурсами игр серии Метро |
Здравствуйте, гость ( Авторизация | Регистрация )
MetroEX - универсальный инструмент для работы с ресурсами игр серии Метро |
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 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 репозиторий - Описание Встречайте MetroTC - комбайн-конвертер любых текстур всех версий Метро в одном флаконе. Ваша задача - указать где лежат текстуры (или одна текстура) и дать команду "Convert!", и программа сама найдет в указанном месте все текстуры Метро, обработает, и выдаст DDS читаемый любыми редакторами и утилитами. Отличительные особенности: 1) Поддержка всех версий игр серии Метро 2) Текстуры 512/1024/2048 (если присутствуют) собираются в один DDS со всем мипмапами и правильными свойствами 3) Программа умеет определять что текстура уже была сконвертированна, и потому ее можно "натравливать" на папки с частично конвертированными текстурами 4) Эксклюзив для Gameru.net 5) Программа залита на сайт gameru.net, а потому ссылка не умрет Распаковщик архивов Metro Exodus от abramcumner Конвертер для текстур эксодуса в .dds от Prodnik -------------------- Hello worlds!
|
 
|
|
|
|
03.03.2019, 22:54
Сообщение
#182
|
|
Заслуженный Мастер Игры Репутация: 267 Группа: Участник Сообщений: 1524 Награды: 4 Регистрация: 10.11.2013 |
Попадается много моделей с назначенными текстурами которых нет вообще в игре. Можешь скинуть скрины посмотреть? Может, в DLC будут? -------------------- |
 
|
|
03.03.2019, 22:57
Сообщение
#183
|
|
Опытный Игрок Репутация: 5 Группа: Участник Сообщений: 53 Регистрация: 05.02.2017 |
Cartoteka, есть папки с моделями подписанные по типу "dlc_han_story" и т.д (upd/ это с ll осталось). Если опят попадётся, сделаю скрины. Просто не запоминал какие модели.
Сообщение отредактировал DaaGuda - 03.03.2019, 23:03 -------------------- |
 
|
|
03.03.2019, 23:00
Сообщение
#184
|
|
Новичок Репутация: 0 Группа: Участник Сообщений: 7 Регистрация: 23.12.2017 |
Попадается много моделей с назначенными текстурами которых нет вообще в игре. Можешь скинуть скрины посмотреть? Может, в DLC будут? Скорее всего он имеет виду немного иное, к примеру у одной модели есть текстура "trees_brunch_alpha", а у другой модели есть текстура "trees_brunch_alpha_broken", которой в файлах вообще нету, но текстура "trees_brunch_alpha" подойдет ко второй модели, что-то подобное есть в СДК нашем, где можно просто поменять цвет без фотошопа. Думаю я понятно разъяснил |
 
|
|
03.03.2019, 23:08
Сообщение
#185
|
|
. Репутация: 750 Группа: Участник Сообщений: 7072 Награды: 4 Регистрация: 30.07.2010 |
Попадается много моделей с назначенными текстурами которых нет вообще в игре. Интересно однако... Это потому что в модели хранится не имя текстуры в папке с текстурами, а имя конфига в textures_handles_storage.bin, в котором уже указывается настоящее имя текстуры. Имя текстуры иногда совпадает с именем конфига и часть текстур успешно открывается. |
 
|
|
03.03.2019, 23:18
Сообщение
#186
|
|
BFG9000 owner
Половина землекопа Репутация: 247 Куратор темы Сообщений: 1813 Регистрация: 30.03.2010 |
iOrange, уже точно не помню как к этому пришел Блин, а ведь действительно. Вот я маху дал. Они же когда кости сетапят, смещение делят на 0x90, при том что размер кости - 0x30. Спасибо за подсказку! Это потому что в модели хранится не имя текстуры в папке с текстурами, а имя конфига в textures_handles_storage.bin, в котором уже указывается настоящее имя текстуры Спасибо, загляну туда. -------------------- Hello worlds!
|
 
|
|
03.03.2019, 23:44
Сообщение
#187
|
|
Опытный Игрок Репутация: 5 Группа: Участник Сообщений: 53 Регистрация: 05.02.2017 |
-------------------- |
 
|
|
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
|
 
|
|
04.03.2019, 05:36
Сообщение
#189
|
|
BFG9000 owner
Половина землекопа Репутация: 247 Куратор темы Сообщений: 1813 Регистрация: 30.03.2010 |
Хотя, что-то мне подсказывает, что с соглашением о вызове тут явно неладно. Непонятно как аргументы передаются, выглядит так словно через регистры. Metro Exodus - скомпилирована в x64, а значит все вызовы - fastcall, первые 4 параметра через регистры (rcx, rdx, r8, r9), остальные - через стек. Флоаты передаются через SSE регистры (xmm0, xmm1, xmm2, xmm3). -------------------- Hello worlds!
|
 
|
|
04.03.2019, 07:47
Сообщение
#190
|
|
BFG9000 owner
Половина землекопа Репутация: 247 Куратор темы Сообщений: 1813 Регистрация: 30.03.2010 |
Делюсь промежуточными результатами - анимированные модели успешно экспортируются в FBX с костями и корректно зариганы.
Но вот при тестировании экспорта оказалось что более сложные модели (люди например) - у них скелеты составные, и внутри скелета могут быть ссылки на другие скелеты. С этим я еще разбираюсь, так что выход v0.29 все еще откладывается Сообщение отредактировал iOrange - 04.03.2019, 07:48 -------------------- Hello worlds!
|
 
|
|
04.03.2019, 08:15
Сообщение
#191
|
|
Новичок Репутация: 0 Группа: Участник Сообщений: 3 Регистрация: 04.03.2019 |
Делюсь промежуточными результатами - анимированные модели успешно экспортируются в FBX с костями и корректно зариганы. Но вот при тестировании экспорта оказалось что более сложные модели (люди например) - у них скелеты составные, и внутри скелета могут быть ссылки на другие скелеты. С этим я еще разбираюсь, так что выход v0.29 все еще откладывается А не могли бы вы выложить версию с доступным FBX экспортом ? Уж очень сильно жду этот вариант экспорта |
 
|
|
04.03.2019, 13:30
Сообщение
#192
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
Metro Exodus - скомпилирована в x64, а значит все вызовы - fastcall, первые 4 параметра через регистры Тогда должно работать. Попробую тем же компилятором собрать которым игра собрана, чтоб c runtimes были одинаковые. -------------------- nop
|
 
|
|
04.03.2019, 15:35
Сообщение
#193
|
|
Новичок Репутация: 0 Группа: Участник Сообщений: 7 Регистрация: 23.12.2017 |
Может выложишь хоть 0.28?)
Сообщение отредактировал qvvxvvq - 04.03.2019, 15:46 |
 
|
|
04.03.2019, 16:57
Сообщение
#194
|
|
Почти Игрок Репутация: 0 Группа: Участник Сообщений: 19 Регистрация: 27.12.2018 |
|
 
|
|
04.03.2019, 17:23
Сообщение
#195
|
|
Новичок Репутация: 0 Группа: Участник Сообщений: 7 Регистрация: 23.12.2017 |
Может выложишь хоть 0.28?) Может наберёшься терпения и немного подождёшь? Он это делает на чистом энтузиазме, за что ему огромное человеческое спасибо. Прояви уважение. Различай уважение и просьбу P.S тут нет ни одного человека, который был бы не рад тому, что делает автор Сообщение отредактировал qvvxvvq - 04.03.2019, 17:24 |
 
|
|
04.03.2019, 17:57
Сообщение
#196
|
|
BFG9000 owner
Половина землекопа Репутация: 247 Куратор темы Сообщений: 1813 Регистрация: 30.03.2010 |
А не могли бы вы выложить версию с доступным FBX экспортом ? Уж очень сильно жду этот вариант экспорта Может выложишь хоть 0.28?) Ок, вечером соберу что есть. Тем более что там есть исправления и улучшения. -------------------- Hello worlds!
|
 
|
|
04.03.2019, 18:59
Сообщение
#197
|
|
Новичок Репутация: 0 Группа: Участник Сообщений: 3 Регистрация: 04.03.2019 |
А не могли бы вы выложить версию с доступным FBX экспортом ? Уж очень сильно жду этот вариант экспорта Может выложишь хоть 0.28?) Ок, вечером соберу что есть. Тем более что там есть исправления и улучшения. Большое спасибо ) |
 
|
|
04.03.2019, 19:53
Сообщение
#198
|
|
Новичок Репутация: 0 Группа: Участник Сообщений: 3 Регистрация: 23.02.2019 |
Спасибо! Буду очень ждать!
|
 
|
|
04.03.2019, 21:05
Сообщение
#199
|
|
Новичок Репутация: 0 Группа: Участник Сообщений: 4 Регистрация: 20.03.2017 |
iOrange, вопрос небольшой. Чисто теоретически, реально ли в ближайшем будущем сделать на основе твоего проекта полноценный инструмент для создания модов? Задумывался ли ты об подобном варианте развития своего проекта?
Будет ли допил для просмотра и экспорта ресурсов из предыдущих версий игры? Сообщение отредактировал waxtinoff - 04.03.2019, 21:06 |
 
|
|
04.03.2019, 22:14
Сообщение
#200
|
|
BFG9000 owner
Половина землекопа Репутация: 247 Куратор темы Сообщений: 1813 Регистрация: 30.03.2010 |
Задумывался ли ты об подобном варианте развития своего проекта? Да, как я и писал ранее - дальнейшая разработка будет вестись открыто на Github, любой желающий сможет участвовать. Будет ли допил для просмотра и экспорта ресурсов из предыдущих версий игры? Сомнительно. -------------------- Hello worlds!
|
 
|
|
05.03.2019, 08:11
Сообщение
#201
|
|
Геймер Репутация: 0 Группа: Участник Сообщений: 100 Регистрация: 02.03.2019 |
Ребята, в какой папке находится поезд Аврора целиком и трупы?
|
 
|
|
Текстовая версия | Сейчас: 25.04.2024, 20:23 |