IPB

>

SDK для 4A Engine своими руками

 
 Modera
сообщение 01.03.2019, 00:36
Сообщение #761


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

Куратор темы
Сообщений: 6815
Регистрация: 30.07.2010
Пользователь №: 13969



Мне тут предложили создать отдельную тему по поводу редактора уровней который я показывал в теме "Вскрытие ресурсов Метро 2033", так что теперь все новости и прочее будет здесь.

Скачать актуальную версию можно тут:
Папка на гугл диск. Исходники там же.

Скачать последнюю тестовую версию можно тут:
Тестовая версия.

Репозиторий на Bitbucket



Чейнджлог

Версия от 28 февраля 2019:
  • Добавлена возможность открывать уровни арктики.1 и Метро Исход (сохранять их есстественно нельзя)
  • Новый пункт меню Render -> Set texture quality для установки качества текстур. По умолчанию 512.
  • Ускоренное перемещение камеры с зажатым Shift


Версия от 17 марта 2019:
  • Теперь параметры текстур читаются из textures.bin или texture_handle_storage.bin, а не угадываются
  • Добавлена поддержка детальных текстур
  • Добавлена возможность редактировать секцию startup из редактора (В меню Level -> Options)
  • Добавлен список объектов на уровне с возможностью выбора (в меню Level -> Select entity)
  • Улучшен редактор параметров, теперь параметры идут в таком же порядке как в level.bin, учитываются вложенные секции и можно редактировать векторы


Версия от 23 марта 2019:
  • Улучена работа функций перемещения и вращения. Всё ещё не так хорошо работает как хотелось бы, но реагирует на нажатия теперь нормально.
  • В меню пункт Save теперь сохраняет level.bin в ту папку из которой он был открыт. Для сохранения в другое место добавлен пункт Save as.
  • Список объектов теперь сортируется.
  • Во фрейм Entity добавлены кнопки Rename и Delete.
  • Параметры типа entity_link, uobject_link теперь показывают не id, а имя. При нажатии объект выбирается из списка. Надеюсь это удобнее.


Версия от 30 апреля 2019:
  • Экспорт сцены
  • Загрузка уровней последнего света
  • Начальная реализация редактора скриптов
  • Добавлен model_Editor, для более удобного назначения материалов на конвертированных моделях.
  • Добавлено окошко выбора модели с предпросмотром. Открывается даблкликом на параметре visual : ref_model или visual : choose.
    (IMG:https://images.gameru.net/thumb/4fdd95f179a6394.png)
  • Так же добавлено более понятное редактирование флагов объектов, открывается даблкликом на oflags : bool8
    (IMG:https://images.gameru.net/thumb/7b6cb97962f1fde.jpg)
  • В редакторе параметров теперь показываются значения векторов
  • Улучшена поддержка уровней исхода, но до идеала ещё очень далеко
  • Коллизия моделей теперь загружается из файлов nxcform_pc (или nxcform_xbox для last light) в случае их присутствия, а не генерируется на лету. По идее ускоряет загрузку уровней, но иногда могут быть проблемы с выделением.


Версия от 18 августа 2019:
  • Версия игры при загрузке уровня теперь определяется автоматически
  • Новая система загрузки level.bin от LL/Redux/Arktika.1/Exodus на джаваскрипте
  • Почти полноценная поддержка ластлайта(длц уровни всё ещё полностью не загружаются)
  • Возможность вращать и перемещать несколько объектов сразу
  • Возможность создавать шаблоны(кнопка add) с несколькими объектами, parent_id и прочие ссылки переназначаются автоматически
  • Виртуальные папки в списке объектов, для указания папок использовать обратный слеш в имени при добавлении шаблона
  • Импорт моделей в model_editor
  • Зум колёсиком в редакторе скриптов
  • Копирование и вставка в LE
  • Минимальная поддержка уровней Redux
  • Исправлено отзеркаливание сцены по оси Z (только LE, в следующей версии будет и ME)


Версия от 25 августа 2019:
  • Доделана загрузка DLC уровней от Last Light
  • Кнопка Clear в редакторе скриптов
  • Уровни ласт лайта при сохранении через Save As теперь сохраняются без отладочной информации, как оригинальные. Хотя работало и так.


Версия от 20 января 2020:
  • альфа блендинг и дисторт
  • допилены манипуляторы, добавлен скейл
  • PhysX2 заменён на PhysX3, теперь объекты с масштабом выбираются корректно
  • Загрузка скелета и работа с прикреплёнными объектами (прикрепить на ctrl+shift)
  • Выбор партиклов/звуков/костей/бон партов/текстур/анимаций света
  • Редактирование Str_array
  • Редактирование матриц
    (IMG:https://images.gameru.net/thumb/165c64a93a24629.jpg)
  • работа с шейпами (удалить шейп ctrl+X, прицепить шейп ctrl+Z)
  • Поддержка последней версии Метро 2033 с патчами
  • Сохранение nxcform из model_editor
  • Выбор шейдеров и материалов в model_editor
  • Работа с LODами в model_editor
  • Загрузка и сохранение level.add.bin, в меню Level: Make addon помечает выбранные объекты для сохранения в level.add.bin, Make Global возвращает обратно в основной level.bin


Версия от 30 марта 2020:
  • Z = -Normal
  • Галочка Select для выделения свежедобавленных объектов
  • Возможность скрывать объекты
  • добавлена возможность указывать объект который используется как pivot при создании группы
  • по просьбам людей с поломанной виндой на которую не ставится PhysX библиотека PhysXLoader.dll теперь delayload
  • Исправлена загрузка суперстатики исхода (раньше загружалась не полностью)
  • Отображение декалей и egeoms
  • Отображение softbody моделей
  • Отображение Environment зон (редактирование недопилено)
  • Кое какая оптимизация за счёт сокращения числа переключений вершинных шейдеров, +20 фпс на уровне l24_alley
  • Экспорт моделей из model editor'а (в т.ч. со скелетом)
  • Теперь при импорте моделей AO берётся из цвета вершин (если есть), встроенный рассчёт AO убран
  • Начальная реализация импорта динамических моделей
  • Отображение двусторонних поверхностей на моделях исхода
  • Режим отображения Ambient Occlusion (выпадающий список рядом с Render Mode)
  • Возможность открывать отдельные .mesh файлы в Model Editor, для настройки материалов


Версия от 28 июня 2021:
  • В окно выбора моделей добавлена возможность выбирать пресеты (по даблклику на модельку)
  • Использование лодов редактором уровней
  • Починена поддержка Windows XP (в прошлой версии было сломано)
  • Исправлено выворачивание бинормалей на импортированных моделях
  • Генератор ID теперь не забивает первые 256 объектов, в оригинальной игре так
  • Начальная реализация импорта анимаций, а так же их отображение в обоих редакторах (только 2033)
  • Пофикшена проблема с нормалями MU объектов на картах конвертированных из сталкера
  • Полная поддержка уровней из Redux версии игры
  • Возможность конвертировать карту из сталкера с лайтмапами. Карта может быть как ЧН/ЗП версии (ключ -lmap) так и ТЧ (ключ -lmap_soc)
  • Возможность конветировать карты в формат Last Light и Redux (ключи -ll и -redux соответственно)
  • Добавлены скрипты разбора параметров карты от Last Light и sounds.bin от Last Light и Redux, автор - Arkyt
  • Погода в редакторе уровней, с возможностю выбора во вкладке Weather
  • Добавлено отображение позиции камеры, рядом с количеством выделенных объектов
  • Undo, Redo и File->Reopen
  • Редактирование зон окружения
  • Переделан интерфейс, и теперь используются визуальные стили
  • Дерево вместо списка для блоков в Script Editor
  • Импорт OMF в Model Editor
  • Отображение анимации
  • Перемещание камеры при помощи мышки как в X-Ray SDK (на Alt)
  • Отображение путей
  • Автоматическая связка путей
  • Манипуляторы заменены на libgizmo
  • Настроена сборка x86 версии


Версия от 20 сентября 2021:
  • Исправлена ошибка с мерцающей позицией камеры в Level Editor
  • Улучшен рассчёт хеми на MU моделях на картах конвертированных из сталкера, теперь c_scale и c_bias учитываются
  • Новый редактор textures.bin - Image Library
    (IMG:https://images.gameru.net/thumb/5eea9eda35384a1.jpg)


Версия от 4 ноября 2021:
  • Параметры для консольных утилит model.exe и binunp.exe теперь можно задавать в любом порядке, как во всех человеческих программах
  • Исправлен баг с отображением softbody моделей при включенном режиме wireframe
  • Добавлена возможность вырезать выделенные объекты
  • Исправлена ошибка из за которой могли неправильно переназначатся ссылки и parent_id при создании или вставке групп объектов
  • Исправлена ошибка с тем что не сбрасывалось выделение при переоткрытии уровня
  • В виду появления возможности загружать моды из папки content добавлены пункты в меню Level для быстрого сохранения и запуска уровня (Save & Run, Run Options) и кнопка на тулбаре
  • Теперь model.exe конвертирует порталы из сталкеровских уровней в level.portals, если они там есть.


Версия от 18 ноября 2021:
  • Level Editor:
    • Исправлена возможность создавать одинаковые связи между блоками в Script Editor'е
    • Теперь для тестуры шрифта в Script Editor'е создаются мипмапы, текст на блоках при уменьшении мастаба стало легче разобрать
    • Полноценная загрузка уровней от Арктики.1, теперь можно сохранять
    • Галочка Uniform для инструмента Scale теперь снова работает
    • Добавлена возможность изменять размер Undo-буфера (пока только через редактирование файла editor_data\level_Editor.ini, секция history, параметр undo_limit)
  • Model Editor:
    • Добавлена вкладка со списком костей скелета + подсветка выбранной кости
    • Редактировение пресетов, для моделей от ласт лайта или последующих игр
  • Image Library:
    • Исправлено дописывание папки импорта к имени текстуры
    • Исправлен краш при импорте текстур в x86 версии
    • Исправлен сброс пути к папке ресурсов при закрытии окна настроек
    • Добавлена настройка качества сжатия crunch тектсур
  • binunp
    • Для ключей -d, -c, -s имя выходного файла теперь необязательно указывать. Если имя выходнго файла не указано, в случае декомпиляции оно будет равно имени входного файла с дописанным .txt (например из level.bin получится level.bin.txt), в случае компиляции будет убрана часть до последней точки, включая саму точку (например из level.terrain.txt получится level.terrain).




Консольные утилиты

Полноценный распаковщик и запаковщик для Last Light, readme в архиве

Программы для работы с конфигами и конвертер моделей

Скачать
Исходники можно найти в исходниках level_editor'а.

В архиве содержится три программы: split.exe, binunp.exe и model.exe.

Первая split.exe, предназначена для разбития scripts.bin на отдельные файлы и сборки обратно.
Для разбития поместить файл scripts.bin в рабочей папке и запустить без параметров или с одним параметром -d(без разницы).
Код
split.exe

Если всё прошло хорошо должна появится папка scripts с большим количеством .bin файлов в ней.

Для обратной сборки запустить с ключом -c:
Код
split.exe -c

Скрипты при сборке опять таки берутся из папки scripts в рабочей папке.

Вторая binunp.exe, предназначена для конвертирования .bin конфигов(файлы добытые из scripts.bin, level.bin и некоторые другие) в человеко-читаемый формат и обратно. Именно на её основе строится редактор уровней.
Что умеет:
  1. Полная распаковка level.bin от Metro 2033
  2. Полная распаковка level.bin от Metro Last Light 2013 года
  3. Частичная распаковка level.bin от Redux/Arktika.1/Exodus
  4. Автоматическая распковка конфигов с отладочной инфой (ключ -d)
  5. Распаковка некоторых конфигов без отладочной инфы (ключ -s)
  6. Запаковка конфигов (ключ -с)


Распаковка level.bin осуществляется следующим образом:
Код
binunp.exe -l -d level.bin level.txt

Где level.bin - имя файла для распаковки.
Где level.txt - имя распакованного текстового файла.

Запаковка level.bin:
Код
binunp.exe -l [-k N] -c level.txt level.bin

Где level.txt - имя текстового файла для запаковки.
Где level.bin - имя нового двоичного файла.
Параметр -k необязательный, на месте N указывается тип .bin файла, по умолчанию 5. В 2033 используется 5, в last light 4, в следующих играх 36.

Распаковка конфигов с отладочной инфой:
Код
binunp.exe -l -d file.bin file.txt

Где file.bin - имя файла для распаковки.
Где file.txt - имя распакованного текстового файла.

При попытке распаковать таким образом конфиг без отладочной информации будет выведено сообщение об ошибке следующего вида:
Код
Exception: Cannot decompile config with kind=4


Распаковка конфигов без отладочной инфы(при помощи скрипта):
Код
binunp [-v] -s js\script.js file.bin file.txt

Где js\script.js - имя скрипта в папке js используемого для разбора конфига.
Где file.bin - имя файла для распаковки.
Где file.txt - имя распакованного текстового файла.
Параметр -v необязательный, если указать то будет выводиться предупреждение в том случае если данные были прочитаны не до конца.

Есть специальный случай, если имя файла для распаковки textures.bin, то скрипт не используется, вместо него нужно указать пустую строчку.
Код
binunp -s "" textures.bin textures.txt


Запаковка конфигов:
Код
binunp.exe [-k N] -c file.txt file.bin

Где file.txt - имя текстового файла для запаковки.
Где file.bin - имя нового двоичного файла.
Параметр -k необязательный, на месте N указывается тип .bin файла, по умолчанию 5. Желательно указывать такой же какой был показан при распаковке.

Последняя model.exe, конвертер моделей.
Умеет следующее:
  1. Конвертирование из .model в .ogf (для тестирования, ключ -model2ogf)
  2. Конвертирование из .ogf в .model (ключ -ogf2model)
  3. Cоздание nxcform_pc на основе модели (ключ -model2nxcform_pc)
  4. Создание уровня на основе основе модели (ключ -model2level)
  5. Конвертирование уровня из формата сталкера в формат 4A Engine (ключ -level2level)

Краткая справка доступна при запуске без параметров.

Эта инструкция будет дописываться.






Сообщение отредактировал Modera - 18.11.2021, 18:21
Перейти в начало страницы
 
 
 
Ответов
 Modera
сообщение 21.10.2021, 01:34
Сообщение #762


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

Куратор темы
Сообщений: 6815
Регистрация: 30.07.2010
Пользователь №: 13969



TheStalkerNest, пожалуйста: https://drive.google.com/file/d/1gSoXcYvYmm...iew?usp=sharing
В наличии также загрузичик моделей игрового формата (.model) вместо .raw
Перейти в начало страницы
 
 
 TheStalkerNest
сообщение 21.10.2021, 10:51
Сообщение #763


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

Группа: Участник
Сообщений: 65
Регистрация: 06.02.2016
Пользователь №: 23713



Цитата(Modera @ 21.10.2021, 02:34) *
TheStalkerNest, пожалуйста: https://drive.google.com/file/d/1gSoXcYvYmm...iew?usp=sharing
В наличии также загрузичик моделей игрового формата (.model) вместо .raw


Спасибо. Думал у меня где-то ошибка в коде, а оказалось, в ll ещё больше переписали pathengine, из-за чего у меня методы в нём не работают.
Видимо, так и придётся генерировать навмеши для ll через оригинал 2033.

Сообщение отредактировал TheStalkerNest - 21.10.2021, 10:54
Перейти в начало страницы
 
 
 Modera
сообщение 21.10.2021, 15:34
Сообщение #764


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

Куратор темы
Сообщений: 6815
Регистрация: 30.07.2010
Пользователь №: 13969



TheStalkerNest, а у тебя не работает именно генерация (buildMeshFromContents) или сохранение (saveGround, saveCollisionPreprocessFor, savePathfindPreprocessFor)?
Перейти в начало страницы
 
 
 TheStalkerNest
сообщение 21.10.2021, 16:46
Сообщение #765


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

Группа: Участник
Сообщений: 65
Регистрация: 06.02.2016
Пользователь №: 23713



Цитата(Modera @ 21.10.2021, 16:34) *
TheStalkerNest, а у тебя не работает именно генерация (buildMeshFromContents) или сохранение (saveGround, saveCollisionPreprocessFor, savePathfindPreprocessFor)?


buildMeshFromContent

Сообщение отредактировал TheStalkerNest - 21.10.2021, 16:46
Перейти в начало страницы
 
 
 Modera
сообщение 21.10.2021, 16:50
Сообщение #766


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

Куратор темы
Сообщений: 6815
Регистрация: 30.07.2010
Пользователь №: 13969



TheStalkerNest, плохо. Если б не работало сохранение у меня есть идея как с ним разобраться, а с этим нет.
Перейти в начало страницы
 
 
 TheStalkerNest
сообщение 21.10.2021, 16:53
Сообщение #767


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

Группа: Участник
Сообщений: 65
Регистрация: 06.02.2016
Пользователь №: 23713



Цитата(Modera @ 21.10.2021, 17:50) *
TheStalkerNest, плохо. Если б не работало сохранение у меня есть идея как с ним разобраться, а с этим нет.


Закомментировав метрошный метод loadMeshFromStream, успешно удалось пройти стадию ctx = real_mesh->newContext();
Дальше краш на burnContextIntoMesh. Тут я пока не разобрался.
Перейти в начало страницы
 
 
 Modera
сообщение 21.10.2021, 17:44
Сообщение #768


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

Куратор темы
Сообщений: 6815
Регистрация: 30.07.2010
Пользователь №: 13969



TheStalkerNest, а разве loadMeshFromStream это не загрузка уже скомпилированной модели?

Цитата(TheStalkerNest @ 21.10.2021, 16:53) *
Дальше краш на burnContextIntoMesh. Тут я пока не разобрался.

Этим я думаю можно пренебречь для тестов, главное чтоб сама модель и все препроцессы к ней создались.
Перейти в начало страницы
 
 
 TheStalkerNest
сообщение 21.10.2021, 19:15
Сообщение #769


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

Группа: Участник
Сообщений: 65
Регистрация: 06.02.2016
Пользователь №: 23713



Цитата(Modera @ 21.10.2021, 18:44) *
TheStalkerNest, а разве loadMeshFromStream это не загрузка уже скомпилированной модели?

Цитата(TheStalkerNest @ 21.10.2021, 16:53) *
Дальше краш на burnContextIntoMesh. Тут я пока не разобрался.

Этим я думаю можно пренебречь для тестов, главное чтоб сама модель и все препроцессы к ней создались.


Этот метод я взял из твоего кастомного хедера. Я использую другой хедер от 5.14 с добавленными методами из 5.16 по официальному changelog'у.
На оригинальном метро он не заводился, а с добавлением этого метода и dummy методов, всё заработало, я и подумал, что это метрошный метод :/

На дллке 5.16 из JustCause 2, этого метода, тоже не было.

Пока эксперементирую с смещениями в хедере, в надежде завести его на ll.
Перейти в начало страницы
 
 
 Modera
сообщение 21.10.2021, 19:39
Сообщение #770


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

Куратор темы
Сообщений: 6815
Регистрация: 30.07.2010
Пользователь №: 13969



Цитата(TheStalkerNest @ 21.10.2021, 19:15) *
я и подумал, что это метрошный метод :/

Так и есть, это метрошный метод, 4А добавляли там всякое для себя, поэтому хедеры и не подходят. Я методом тыка разбирался с этим, dummy это новые методы, и возможно они даже не в тех местах где должны быть на самом деле.

В ласт лайте ещё как я понял функции сохранения (saveGround, saveCollisionPreprocessFor, ...) принимают не родной для pathengine интерфейс iOutputStream (или как там его?) а движковый iwriter. С этим тоже придётся поплясать. Зато модель должна сохранится сразу в нужном формате, не придётся перегонять из tok в bin.
Перейти в начало страницы
 
 
 TheStalkerNest
сообщение 22.10.2021, 00:32
Сообщение #771


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

Группа: Участник
Сообщений: 65
Регистрация: 06.02.2016
Пользователь №: 23713



Цитата(Modera @ 21.10.2021, 20:39) *
Цитата(TheStalkerNest @ 21.10.2021, 19:15) *
я и подумал, что это метрошный метод :/

Так и есть, это метрошный метод, 4А добавляли там всякое для себя, поэтому хедеры и не подходят. Я методом тыка разбирался с этим, dummy это новые методы, и возможно они даже не в тех местах где должны быть на самом деле.

В ласт лайте ещё как я понял функции сохранения (saveGround, saveCollisionPreprocessFor, ...) принимают не родной для pathengine интерфейс iOutputStream (или как там его?) а движковый iwriter. С этим тоже придётся поплясать. Зато модель должна сохранится сразу в нужном формате, не придётся перегонять из tok в bin.


Возможно всё-таки получится реализовать отдельную утилиту.
Я как-то писал пол-года назад, что удалось инициализировать дллку 5.16, хукнув методы аллокации, однако дальше дело тогда не пошло.
Сейчас пореверсил её, заменил хуки на полноценную эмуляцию игрового аллокатора, и обнаружил ещё одно изменение в iFaceVertexMesh. Там перед методом faces, был добавлен ещё какой-то метод. На данный момент добавил пустой метод-затычку, и вроде-бы всё успешно дошло до метода saveGround. В нём дллка кидает ошибку. Завтра покопаюсь ещё. Исходники оставляю тут, если интересно глянуть (пути до файлов, прописаны в исходнике, для отладки).

(IMG:https://i.ibb.co/G3DnJHN/image.png)

https://drive.google.com/file/d/1_yPusz67EP...iew?usp=sharing

Сообщение отредактировал TheStalkerNest - 22.10.2021, 00:34
Перейти в начало страницы
 
 
 TheStalkerNest
сообщение 23.10.2021, 21:57
Сообщение #772


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

Группа: Участник
Сообщений: 65
Регистрация: 06.02.2016
Пользователь №: 23713



Публикую новую версию игрового плагина MetroDeveloper.
https://github.com/tsnest/MetroDeveloper/re...roDeveloper.zip

Интегрирована поддержка генерации навмеша для metro last light, через metro 2033 (by Modera).

Интегрирована поддержка формата .model для генерации навмеша (by Modera).

Исправлен неправильный алгоритм генерации навмеша (by Modera).

Исправлено некорректное закрытие игры при генерации навмеша с включенным параметром exitwhendone.

Теперь при генерации навмеша, intro ролики не запускаются, вне зависимости от того, включен-ли параметр nointro.

Убрана 5-ти секундная задержка при генерации навмеша (теперь навмеш генерируется сразу, как только загрузится игра).

Всем функциям кроме nav_map, добавлена полная поддержка last light.

Внешнее окно консоли, теперь открывается только при генерации навмеша.

Добавлен звуковой сигнал при загрузке плагина (Можно отключить в конфиге. Параметр beep).

Переименован конфиг.

Обновлена инструкция по генерации навмеша.

Прочие незначительные правки кода.

По идее, плагин теперь должен работать и на Windows XP.

Сообщение отредактировал TheStalkerNest - 23.10.2021, 22:00
Перейти в начало страницы
 
 
 TheStalkerNest
сообщение 24.10.2021, 19:10
Сообщение #773


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

Группа: Участник
Сообщений: 65
Регистрация: 06.02.2016
Пользователь №: 23713



Пытался реализовать чтение ресурсов из папки content, для оригинального метро, и даже удалось вывести список файлов, однако хук некорректно работает из-за __usercall соглашения.

(IMG:https://i.ibb.co/kxdZFcY/image.png)

Modera, поможешь в реализации asm хука и вызова функции читающей файлы с диска? Ниже адреса функций для твоего exe.
Судя по выведенной инфе, функция читает абсолютно все файлы, в отличии от redux.

Адрес функции читающей файлы с архивов:
metro2033.exe + 0x538B70

Адрес функции читающей файлы с диска:
metro2033.exe + 0x538920
Перейти в начало страницы
 
 
 Modera
сообщение 24.10.2021, 21:54
Сообщение #774


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

Куратор темы
Сообщений: 6815
Регистрация: 30.07.2010
Пользователь №: 13969



TheStalkerNest, 2033 чё-то не хочет у меня запускаться если вызывать vfs::ropen_os вместо vfs::ropen. Просто сразу крашится и всё.

Ласт лайт получше себя чувствует, но геометрия и текстуры не грузятся. Похоже та же песня что и с редаксом.
(IMG:https://images.gameru.net/thumb/7056347061f2a81.jpg)
Копипаст кода хука можно лицезреть в блокноте справа.


Походу заменять только одну функцию мало, там есть ещё какая-то vfs::rbuffered, которой грузится геометрия и текстуры.
Кстати эта функция есть и в 2033, даже на твоём скрине видно что нет сообщения о загрузке level.geom_pc.
Перейти в начало страницы
 
 
 TheStalkerNest
сообщение 24.10.2021, 22:28
Сообщение #775


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

Группа: Участник
Сообщений: 65
Регистрация: 06.02.2016
Пользователь №: 23713



Цитата(Modera @ 24.10.2021, 22:54) *
TheStalkerNest, 2033 чё-то не хочет у меня запускаться если вызывать vfs::ropen_os вместо vfs::ropen. Просто сразу крашится и всё.

Ласт лайт получше себя чувствует, но геометрия и текстуры не грузятся. Похоже та же песня что и с редаксом.
(IMG:https://images.gameru.net/thumb/7056347061f2a81.jpg)
Копипаст кода хука можно лицезреть в блокноте справа.


Походу заменять только одну функцию мало, там есть ещё какая-то vfs::rbuffered, которой грузится геометрия и текстуры.
Кстати эта функция есть и в 2033, даже на твоём скрине видно что нет сообщения о загрузке level.geom_pc.


Т.е. на ласт лайте vfs::ropen_os не все перехваченные файлы грузит? Если да, то может попробовать для тестов не всю распакованную папку грузить, а например какие-то отдельные файлы (например level.bin подменить)?

По поводу краша на 2033, то там регистры у обоих функций отличаются. Возможно ты это не учёл.

Для сравнения, инфа из ida для 2033
int __usercall vfs::ropen_package@<eax>(int a1@<esi>, void *Src)
_DWORD *__usercall vfs::ropen_os@<eax>(_DWORD *a1@<edi>, int a2)

В ласт лайте vfs::ropen_os имеет нормальное __cdecl соглашение
_DWORD *__cdecl vfs::ropen_os(_DWORD *a1, int a2)

Сообщение отредактировал TheStalkerNest - 24.10.2021, 22:32
Перейти в начало страницы
 
 
 Modera
сообщение 24.10.2021, 22:46
Сообщение #776


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

Куратор темы
Сообщений: 6815
Регистрация: 30.07.2010
Пользователь №: 13969



Цитата(TheStalkerNest @ 24.10.2021, 22:28) *
Т.е. на ласт лайте vfs::ropen_os не все перехваченные файлы грузит? Если да, то может попробовать для тестов не всю распакованную папку грузить, а например какие-то отдельные файлы (например level.bin подменить)?

Ну я как-то так и сделал, что сначала проверяется есть ли нужный файл в распакованной папке content, если есть то вызывается vfs::ropen_os, иначе вызывается оригинальная функция для чтения из архива. level.bin подменять таким образом можно.

Цитата(TheStalkerNest @ 24.10.2021, 22:28) *
По поводу краша на 2033, то там регистры у обоих функций отличаются. Возможно ты это не учёл.

Ну я вроде переставлял esi в edi. Можно ещё раз попробовать.
Перейти в начало страницы
 
 
 Modera
сообщение 24.10.2021, 23:51
Сообщение #777


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

Куратор темы
Сообщений: 6815
Регистрация: 30.07.2010
Пользователь №: 13969



Всё-таки получилось хукнуть 2033, надо было оказывается сохранять значение edi.
(IMG:https://images.gameru.net/thumb/ae36867d734f5ca.png)

История та же самая что и с ЛЛ и с редаксом, геометрия не грузится.
Перейти в начало страницы
 
 
 TheStalkerNest
сообщение 25.10.2021, 02:45
Сообщение #778


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

Группа: Участник
Сообщений: 65
Регистрация: 06.02.2016
Пользователь №: 23713



Цитата(Modera @ 25.10.2021, 00:51) *
Всё-таки получилось хукнуть 2033, надо было оказывается сохранять значение edi.
(IMG:https://images.gameru.net/thumb/ae36867d734f5ca.png)

История та же самая что и с ЛЛ и с редаксом, геометрия не грузится.


Можешь пожалуйста, написать готовый хук в дллку под синтаксис intel?
Я всё правильно переписал с скриншота, однако при компиляции, добавляются левые команды, которые вообще непонятно откуда берутся :/

(IMG:https://i.ibb.co/rxBnnjL/image.png)
Перейти в начало страницы
 
 
 Modera
сообщение 25.10.2021, 02:48
Сообщение #779


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

Куратор темы
Сообщений: 6815
Регистрация: 30.07.2010
Пользователь №: 13969



TheStalkerNest, попробуй указать для своей функции __declspec(naked).

А так, я сам точно не знаю как чисто ассемблерную функцию сделать в майкрософтовском компиляторе. Разве что в отдельном .asm файле писать.
Перейти в начало страницы
 
 
 TheStalkerNest
сообщение 25.10.2021, 02:55
Сообщение #780


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

Группа: Участник
Сообщений: 65
Регистрация: 06.02.2016
Пользователь №: 23713



Цитата(Modera @ 25.10.2021, 03:48) *
TheStalkerNest, попробуй указать для своей функции __declspec(naked).

А так, я сам точно не знаю как чисто ассемблерную функцию сделать в майкрософтовском компиляторе. Разве что в отдельном .asm файле писать.


Спасибо, помогло!
Перейти в начало страницы
 
 
 TheStalkerNest
сообщение 25.10.2021, 14:10
Сообщение #781


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

Группа: Участник
Сообщений: 65
Регистрация: 06.02.2016
Пользователь №: 23713



Публикую новую версию игрового плагина MetroDeveloper от 25.10.2021.
https://github.com/tsnest/MetroDeveloper/re...roDeveloper.zip

Добавлена частичная разблокировка чтения ресурсов из папки content (спасибо Modera за помощь в реализации).
Очень удобная функция, при редактировании level.bin.
Включается в конфиге, параметром unlock_content_folder.

Поддерживается как 2033 так и last light.


=======================

С добавлением этой функции, у меня появилась новая идея для level editor'a:

1. Кнопка запуска игры, для быстрого тестирования изменений level.bin и т.д, без сворачивания редактора.
2. Строка пути к exe'шнику игры (пример "C:\Metro2033\metro2033.exe")
3. Строка пути рабочей папки игры (мало-ли, пригодится) (пример "C:\Metro2033\")
4. Строка аргументов запуска игры (пример "-dx9")

Ну и соответственно пункты 2, 3 и 4, свои для каждой игры.

Сообщение отредактировал TheStalkerNest - 25.10.2021, 14:22
Перейти в начало страницы
 
 
 
 

 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 03.12.2021, 16:32