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

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

Gameru.net останавливает работу в связи с вторжением армии РФ в Украину. Следите за дальнейшими анонсами.
Support Gameru!
> SDK для 4A Engine своими руками
Modera
сообщение 01.03.2019, 00:36
Сообщение #681


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

Репутация:   750  
Куратор темы
Сообщений: 7072
Регистрация: 30.07.2010




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


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

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

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

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

Скриншоты

Уровни из 2033 и Last Light с погодой:




Уровни из арктики:





Уровни из исхода:




Чейнджлог

Версия от 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.
  • Так же добавлено более понятное редактирование флагов объектов, открывается даблкликом на oflags : bool8
  • В редакторе параметров теперь показываются значения векторов
  • Улучшена поддержка уровней исхода, но до идеала ещё очень далеко
  • Коллизия моделей теперь загружается из файлов 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
  • Редактирование матриц
  • работа с шейпами (удалить шейп 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


Версия от 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).


Версия от 6 февраля 2022:
  • Level Editor:
    • Переименован пункт меню Make Addon в Move selection to level.add.bin
    • Переименован пункт меню Make Global в Move selection to level.bin, а так же исправлена его работа (раньше не работало)
    • Добавлен пункт меню Select all entities from level.add.bin для выделения всех объектов которые сохраняются в level.add.bin
    • Ускорено заполнение списка свойств при выделении объектов
    • Добавлен опционально двухколоночный список свойств, включить можно в level_Editor.ini, секция properties, параметр two_column
    • Добавлена опция для скрытия объектов по удалению от камеры согласно параметру cull_distance (в меню Render -> Distance Culling)
    • Исправлена возможность редактировать уровень до того как он полностью загрузится, что приводило к ошибке
    • Переработана система Undo с целью сделать её быстрее, менее требовательной к памяти, и устранения многих странных моментов, например когда бекап делался после изменения а не до, как положено
  • binunp:
    • Добавлен подсчёт времени затраченного на загрузку и сохранение конфигов при декомпиляции и компиляции
  • Исправлена ошибка из за которой не грузился sounds.bin от ласт лайта
  • Исправлен жирный баг с неработающим перемещением в анимациях от оригинального 2033
  • Анимации от Last Light и Redux теперь загружаются
  • Полное чтение и сохранение level.bin'ов от Исхода последней версии (загрузка изменённых файлов игрой не тестировалась)
  • Оптимизирован отжор памяти распакованными конфигами
  • Оптимизирована отрисовка сцены за счёт снижения количества переключения текстур (не очень, можно и лучше)




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

Полноценный распаковщик и запаковщик для 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 - 06.02.2022, 08:21
Перейти в начало страницы
 
43 страниц V  « < 33 34 35 36 37 > »   
Начать новую тему
Ответов
Modera
сообщение 27.05.2021, 01:42
Сообщение #682


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

Репутация:   750  
Куратор темы
Сообщений: 7072
Регистрация: 30.07.2010




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


Цитата(TheStalkerNest @ 26.05.2021, 20:56) *
Могу попробовать, но есть-ли в этом смысл, если можно только заменять существующие файлы без загрузки новых файлов?
Или я ошибаюсь?

Ну я как минимум добавлял новый уровень эталон, хотя и с оговорками, и .dds текстуры, так что возможность добавлять файлы есть. Скорее всего и с моделями тоже сработает.

Исходники ДЛЛ с хаком и EXE-шник который я использую отправил в ЛС.

Цитата(Rolan96 @ 26.05.2021, 21:16) *
Но для импорта своих моделей пока решения нет, верно?

Уже года два в model_Editor'е можно открыть в меню Model -> Set Version и выбрать Metro Exodus. У меня даже что-то получалось заменять.

Хотя это очень экспериментальная функция.
Перейти в начало страницы
 
Rolan96
сообщение 28.05.2021, 04:05
Сообщение #683


Продвинутый геймер
********

Репутация:   48  
Группа: Участник
Сообщений: 275
Награды: 3
Регистрация: 30.11.2010




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


Цитата(Modera @ 27.05.2021, 01:42) *
Цитата(TheStalkerNest @ 26.05.2021, 20:56) *
Могу попробовать, но есть-ли в этом смысл, если можно только заменять существующие файлы без загрузки новых файлов?
Или я ошибаюсь?

Ну я как минимум добавлял новый уровень эталон, хотя и с оговорками, и .dds текстуры, так что возможность добавлять файлы есть. Скорее всего и с моделями тоже сработает.

Исходники ДЛЛ с хаком и EXE-шник который я использую отправил в ЛС.

Цитата(Rolan96 @ 26.05.2021, 21:16) *
Но для импорта своих моделей пока решения нет, верно?

Уже года два в model_Editor'е можно открыть в меню Model -> Set Version и выбрать Metro Exodus. У меня даже что-то получалось заменять.

Хотя это очень экспериментальная функция.


Ну с геометрией проблем нет.
Хотя есть подозрение, что моделька чуток бьется, но возможно это сделал actoreditor.

Только не понимаю, как ему текстуры подкинуть?
Model editor текстуры видит.
Запаковываю.
Игра не видит.
Открываю архив через metroex, текстуры в архиве есть, но его просмотрщик их не видит.
Распаковываю архив, подкидываю текстуры из архива ME и он их видит. WTF? o_O.gif

Кстати, при загрузке уровня в LE не работает кнопка отмена во время Loading entities

UPD: Разобрался почему новая версия исхода не принимала изменений. Изменился путь до модели,
был:
"content\meshes\static\vehicles\funicular\funicular_base.model"
стал:
"content\meshes\static\cars\funicular\funicular_base.model"
Но с моделькой ренджа игра вылетела на моменте загрузки главы.

UPD2:
Фуникулер не победился, зато победилась дверь в EnhancedEdition)



Текстуры все равно почему-то не подцепляются.

Сообщение отредактировал Rolan96 - 28.05.2021, 05:41
Перейти в начало страницы
 
Modera
сообщение 28.05.2021, 17:38
Сообщение #684


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

Репутация:   750  
Куратор темы
Сообщений: 7072
Регистрация: 30.07.2010




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


Цитата(Rolan96 @ 28.05.2021, 04:05) *
Только не понимаю, как ему текстуры подкинуть?

Хороший вопрос. У меня редакс тоже текстуры новые никак не принимает, ни через патчи, ни через расширение архива в MetroEX, ни через хак файловой системы.


Цитата(Rolan96 @ 28.05.2021, 04:05) *
Кстати, при загрузке уровня в LE не работает кнопка отмена во время Loading entities

Да, есть такое.

А Redux даже умеет в реальном времени считать отражённый свет, прикольно. С розовой текстурой очень сильно заметно.
Как же я отстал от прогресса ковыряясь только в сталкере...


Цитата(Rolan96 @ 28.05.2021, 04:05) *
Ну с геометрией проблем нет.

Коллизию тоже можешь проверить, новую тестовую версию с сохранением nxcform33x из model_Editor я уже закинул: https://drive.google.com/file/d/1I-YiZkUjYn...iew?usp=sharing

С редаксом точно работает, а с исходом не факт, т.к. разные версии PhysX 3, а для него это вроде критично.
Перейти в начало страницы
 
TheStalkerNest
сообщение 28.05.2021, 19:47
Сообщение #685


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

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




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


Цитата(Modera @ 27.05.2021, 02:42) *
Цитата(TheStalkerNest @ 26.05.2021, 20:56) *
Могу попробовать, но есть-ли в этом смысл, если можно только заменять существующие файлы без загрузки новых файлов?
Или я ошибаюсь?

Ну я как минимум добавлял новый уровень эталон, хотя и с оговорками, и .dds текстуры, так что возможность добавлять файлы есть. Скорее всего и с моделями тоже сработает.

Исходники ДЛЛ с хаком и EXE-шник который я использую отправил в ЛС.

Цитата(Rolan96 @ 26.05.2021, 21:16) *
Но для импорта своих моделей пока решения нет, верно?

Уже года два в model_Editor'е можно открыть в меню Model -> Set Version и выбрать Metro Exodus. У меня даже что-то получалось заменять.

Хотя это очень экспериментальная функция.


Глянул исходники, как будет время, переделаю. Их потом опубликовать с дллкой?
И да, есть-ли включение консоли под оригинальное метро?

Сообщение отредактировал TheStalkerNest - 28.05.2021, 19:50
Перейти в начало страницы
 
Modera
сообщение 28.05.2021, 19:51
Сообщение #686


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

Репутация:   750  
Куратор темы
Сообщений: 7072
Регистрация: 30.07.2010




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


Цитата(TheStalkerNest @ 28.05.2021, 19:47) *
Глянул исходники, как будет время, переделаю. Их потом опубликовать с дллкой?

Если хочешь, можешь опубликовать.

Цитата(TheStalkerNest @ 28.05.2021, 19:47) *
И да, заметил в исходниках включение консоли. Есть-ли такое под оригинальную метро?

Под оригинальную метро ещё не делал, только под редакс и ласт лайт 2013 года.
Перейти в начало страницы
 
JackieR
сообщение 28.05.2021, 23:03
Сообщение #687


Ветеран
*****

Репутация:   10  
Группа: Участник
Сообщений: 99
Регистрация: 28.11.2018




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


Цитата(TheStalkerNest @ 28.05.2021, 19:47) *
И да, есть-ли включение консоли под оригинальное метро?

Речь же про внутри игровую консоль? iOrange сделал скриптик для этого, спроси у него.

Цитата(Rolan96 @ 28.05.2021, 04:05) *
Model editor текстуры видит.
Запаковываю.
Игра не видит.
Открываю архив через metroex, текстуры в архиве есть, но его просмотрщик их не видит.
Распаковываю архив, подкидываю текстуры из архива ME и он их видит. WTF? o_O.gif

Для текстур в Редуксах и Исходе надо отдельные .bin'ы создавать чтобы игра их увидела. Сделать этого пока нельзя.


--------------------
Перейти в начало страницы
 
TheStalkerNest
сообщение 28.05.2021, 23:22
Сообщение #688


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

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




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


Цитата(JackieR @ 29.05.2021, 00:03) *
Цитата(TheStalkerNest @ 28.05.2021, 19:47) *
И да, есть-ли включение консоли под оригинальное метро?

Речь же про внутри игровую консоль? iOrange сделал скриптик для этого, спроси у него.


Я ему уже писал. Его разработка превратилась в долгострой, который непонятно, выйдет-ли когда-нибудь вообще.
Ещё в начале 19го года SunBeam делал консоль для оригинальной метро, но публиковал только для исхода. Связаться с ним, так и не удалось.
Я уже думал свою консоль написать на ImGui, т.к. есть метод выполнения команд в консоли.
Перейти в начало страницы
 
JackieR
сообщение 29.05.2021, 14:48
Сообщение #689


Ветеран
*****

Репутация:   10  
Группа: Участник
Сообщений: 99
Регистрация: 28.11.2018




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


Цитата(Modera @ 28.05.2021, 17:38) *
Цитата(Rolan96 @ 28.05.2021, 04:05) *
Ну с геометрией проблем нет.

Коллизию тоже можешь проверить, новую тестовую версию с сохранением nxcform33x из model_Editor я уже закинул: https://drive.google.com/file/d/1I-YiZkUjYn...iew?usp=sharing

С редаксом точно работает, а с исходом не факт, т.к. разные версии PhysX 3, а для него это вроде критично.


Попробовал боевую классику из ТЧ перенести. Коллизия работает.



Сообщение отредактировал JackieR - 29.05.2021, 14:50


--------------------
Перейти в начало страницы
 
Rolan96
сообщение 29.05.2021, 15:31
Сообщение #690


Продвинутый геймер
********

Репутация:   48  
Группа: Участник
Сообщений: 275
Награды: 3
Регистрация: 30.11.2010




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


Modera, новая версия работает прекрасно, коллизия создалась без проблем и работает.

JackieR, опередил меня) ты заменил существующую текстуру?

Перейти в начало страницы
 
JackieR
сообщение 29.05.2021, 15:46
Сообщение #691


Ветеран
*****

Репутация:   10  
Группа: Участник
Сообщений: 99
Регистрация: 28.11.2018




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


Цитата(Rolan96 @ 29.05.2021, 15:31) *
Modera, новая версия работает прекрасно, коллизия создалась без проблем и работает.

JackieR, опередил меня) ты заменил существующую текстуру?

Да, заменил существующую. По другому то пока никак.


--------------------
Перейти в начало страницы
 
Rolan96
сообщение 29.05.2021, 16:08
Сообщение #692


Продвинутый геймер
********

Репутация:   48  
Группа: Участник
Сообщений: 275
Награды: 3
Регистрация: 30.11.2010




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


JackieR, Я так понял, что список текстур с параметрами хранится в textures_handles_storage.bin или где-то ещё?
Он нормально перегоняется в json конвертором для оружия из МетроЕх
json"
Код
  "ui\\ui_me_save_load_icon512": {
    "type": 0,
    "upgrade_id": 14453,
    "base_handle": "stringz",
    "data": {
      "shared_weapon_params": "",
      "priority": 0,
      "ui_tag_lib": 0,
      "tags": [],
      "excl_tags": [],
      "dep_tags": [],
      "autoinst_tags": [],
      "is_installed": false,
      "editor_name": "",
      "attach_hud_loc": "",
      "attach_offset": [
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0
      ],
      "attach_to_root": false,
      "visual": "",
      "for_dlc2_only": false,
      "anim_track_prefix": "",
      "anim_track_suffix": ""
    }

Были бы сорцы метроех можно было бы переписать это часть кода и разбирать файл в текстурами, тем более что вся инфа по этому файлу же есть в томже метроех:
bin"
Код
void MetroTextureInfo::Serialize(MetroReflectionStream& s) {
    METRO_SERIALIZE_MEMBER(s, type);
    METRO_SERIALIZE_MEMBER(s, texture_type);
    METRO_SERIALIZE_MEMBER(s, source_name);
    METRO_SERIALIZE_MEMBER(s, surf_xform);
    METRO_SERIALIZE_MEMBER(s, format);
    METRO_SERIALIZE_MEMBER(s, width);
    METRO_SERIALIZE_MEMBER(s, height);
    METRO_SERIALIZE_MEMBER(s, animated);
    METRO_SERIALIZE_MEMBER(s, draft);
    METRO_SERIALIZE_MEMBER(s, override_avg_color);
    METRO_SERIALIZE_MEMBER(s, avg_color);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, shader_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, gamemtl_name);
    METRO_SERIALIZE_MEMBER(s, priority);
    METRO_SERIALIZE_MEMBER(s, streamable);
    METRO_SERIALIZE_MEMBER(s, bump_height);
    METRO_SERIALIZE_MEMBER(s, displ_type);
    METRO_SERIALIZE_MEMBER(s, displ_height);
    METRO_SERIALIZE_MEMBER(s, parallax_height_mul);
    METRO_SERIALIZE_MEMBER(s, mipmapped);
    METRO_SERIALIZE_MEMBER(s, reflectivity);
    METRO_SERIALIZE_MEMBER(s, treat_as_metal);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, det_name);
    METRO_SERIALIZE_MEMBER(s, det_scale_u);
    METRO_SERIALIZE_MEMBER(s, det_scale_v);
    METRO_SERIALIZE_MEMBER(s, det_intensity);
    METRO_SERIALIZE_MEMBER(s, aux_params);
    METRO_SERIALIZE_MEMBER(s, aux_params_1);

    // !!! Optional fields !!!
    if (this->texture_type == scast<uint8_t>(TextureType::Cubemap_hdr)) {
        METRO_SERIALIZE_ARRAY_MEMBER(s, sph_coefs);
    } else if (this->texture_type == scast<uint8_t>(TextureType::Unknown_has_lum)) {
        METRO_SERIALIZE_ARRAY_MEMBER(s, lum);
    }
    ///////////////////////////

    METRO_SERIALIZE_MEMBER_CHOOSE(s, bump_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux0_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux1_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux2_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux3_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux4_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux5_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux6_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux7_name);
}

но я смог найти только исходники версии, где не было конвертера конфига оружия.

UPD: нашел ещё файл с текстурами texture_aliases.bin

Сообщение отредактировал Rolan96 - 29.05.2021, 16:21
Перейти в начало страницы
 
TheStalkerNest
сообщение 29.05.2021, 19:33
Сообщение #693


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

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




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


Цитата(Rolan96 @ 29.05.2021, 17:08) *
JackieR, Я так понял, что список текстур с параметрами хранится в textures_handles_storage.bin или где-то ещё?
Он нормально перегоняется в json конвертором для оружия из МетроЕх
json"
Код
  "ui\\ui_me_save_load_icon512": {
    "type": 0,
    "upgrade_id": 14453,
    "base_handle": "stringz",
    "data": {
      "shared_weapon_params": "",
      "priority": 0,
      "ui_tag_lib": 0,
      "tags": [],
      "excl_tags": [],
      "dep_tags": [],
      "autoinst_tags": [],
      "is_installed": false,
      "editor_name": "",
      "attach_hud_loc": "",
      "attach_offset": [
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0
      ],
      "attach_to_root": false,
      "visual": "",
      "for_dlc2_only": false,
      "anim_track_prefix": "",
      "anim_track_suffix": ""
    }

Были бы сорцы метроех можно было бы переписать это часть кода и разбирать файл в текстурами, тем более что вся инфа по этому файлу же есть в томже метроех:
bin"
Код
void MetroTextureInfo::Serialize(MetroReflectionStream& s) {
    METRO_SERIALIZE_MEMBER(s, type);
    METRO_SERIALIZE_MEMBER(s, texture_type);
    METRO_SERIALIZE_MEMBER(s, source_name);
    METRO_SERIALIZE_MEMBER(s, surf_xform);
    METRO_SERIALIZE_MEMBER(s, format);
    METRO_SERIALIZE_MEMBER(s, width);
    METRO_SERIALIZE_MEMBER(s, height);
    METRO_SERIALIZE_MEMBER(s, animated);
    METRO_SERIALIZE_MEMBER(s, draft);
    METRO_SERIALIZE_MEMBER(s, override_avg_color);
    METRO_SERIALIZE_MEMBER(s, avg_color);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, shader_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, gamemtl_name);
    METRO_SERIALIZE_MEMBER(s, priority);
    METRO_SERIALIZE_MEMBER(s, streamable);
    METRO_SERIALIZE_MEMBER(s, bump_height);
    METRO_SERIALIZE_MEMBER(s, displ_type);
    METRO_SERIALIZE_MEMBER(s, displ_height);
    METRO_SERIALIZE_MEMBER(s, parallax_height_mul);
    METRO_SERIALIZE_MEMBER(s, mipmapped);
    METRO_SERIALIZE_MEMBER(s, reflectivity);
    METRO_SERIALIZE_MEMBER(s, treat_as_metal);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, det_name);
    METRO_SERIALIZE_MEMBER(s, det_scale_u);
    METRO_SERIALIZE_MEMBER(s, det_scale_v);
    METRO_SERIALIZE_MEMBER(s, det_intensity);
    METRO_SERIALIZE_MEMBER(s, aux_params);
    METRO_SERIALIZE_MEMBER(s, aux_params_1);

    // !!! Optional fields !!!
    if (this->texture_type == scast<uint8_t>(TextureType::Cubemap_hdr)) {
        METRO_SERIALIZE_ARRAY_MEMBER(s, sph_coefs);
    } else if (this->texture_type == scast<uint8_t>(TextureType::Unknown_has_lum)) {
        METRO_SERIALIZE_ARRAY_MEMBER(s, lum);
    }
    ///////////////////////////

    METRO_SERIALIZE_MEMBER_CHOOSE(s, bump_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux0_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux1_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux2_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux3_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux4_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux5_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux6_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux7_name);
}

но я смог найти только исходники версии, где не было конвертера конфига оружия.

UPD: нашел ещё файл с текстурами texture_aliases.bin



Отправил в лс исходники за 18 апреля 2019
Перейти в начало страницы
 
Rolan96
сообщение 29.05.2021, 19:53
Сообщение #694


Продвинутый геймер
********

Репутация:   48  
Группа: Участник
Сообщений: 275
Награды: 3
Регистрация: 30.11.2010




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


Цитата(TheStalkerNest @ 29.05.2021, 19:33) *
Цитата(Rolan96 @ 29.05.2021, 17:08) *
JackieR, Я так понял, что список текстур с параметрами хранится в textures_handles_storage.bin или где-то ещё?
Он нормально перегоняется в json конвертором для оружия из МетроЕх
json"
Код
  "ui\\ui_me_save_load_icon512": {
    "type": 0,
    "upgrade_id": 14453,
    "base_handle": "stringz",
    "data": {
      "shared_weapon_params": "",
      "priority": 0,
      "ui_tag_lib": 0,
      "tags": [],
      "excl_tags": [],
      "dep_tags": [],
      "autoinst_tags": [],
      "is_installed": false,
      "editor_name": "",
      "attach_hud_loc": "",
      "attach_offset": [
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0
      ],
      "attach_to_root": false,
      "visual": "",
      "for_dlc2_only": false,
      "anim_track_prefix": "",
      "anim_track_suffix": ""
    }

Были бы сорцы метроех можно было бы переписать это часть кода и разбирать файл в текстурами, тем более что вся инфа по этому файлу же есть в томже метроех:
bin"
Код
void MetroTextureInfo::Serialize(MetroReflectionStream& s) {
    METRO_SERIALIZE_MEMBER(s, type);
    METRO_SERIALIZE_MEMBER(s, texture_type);
    METRO_SERIALIZE_MEMBER(s, source_name);
    METRO_SERIALIZE_MEMBER(s, surf_xform);
    METRO_SERIALIZE_MEMBER(s, format);
    METRO_SERIALIZE_MEMBER(s, width);
    METRO_SERIALIZE_MEMBER(s, height);
    METRO_SERIALIZE_MEMBER(s, animated);
    METRO_SERIALIZE_MEMBER(s, draft);
    METRO_SERIALIZE_MEMBER(s, override_avg_color);
    METRO_SERIALIZE_MEMBER(s, avg_color);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, shader_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, gamemtl_name);
    METRO_SERIALIZE_MEMBER(s, priority);
    METRO_SERIALIZE_MEMBER(s, streamable);
    METRO_SERIALIZE_MEMBER(s, bump_height);
    METRO_SERIALIZE_MEMBER(s, displ_type);
    METRO_SERIALIZE_MEMBER(s, displ_height);
    METRO_SERIALIZE_MEMBER(s, parallax_height_mul);
    METRO_SERIALIZE_MEMBER(s, mipmapped);
    METRO_SERIALIZE_MEMBER(s, reflectivity);
    METRO_SERIALIZE_MEMBER(s, treat_as_metal);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, det_name);
    METRO_SERIALIZE_MEMBER(s, det_scale_u);
    METRO_SERIALIZE_MEMBER(s, det_scale_v);
    METRO_SERIALIZE_MEMBER(s, det_intensity);
    METRO_SERIALIZE_MEMBER(s, aux_params);
    METRO_SERIALIZE_MEMBER(s, aux_params_1);

    // !!! Optional fields !!!
    if (this->texture_type == scast<uint8_t>(TextureType::Cubemap_hdr)) {
        METRO_SERIALIZE_ARRAY_MEMBER(s, sph_coefs);
    } else if (this->texture_type == scast<uint8_t>(TextureType::Unknown_has_lum)) {
        METRO_SERIALIZE_ARRAY_MEMBER(s, lum);
    }
    ///////////////////////////

    METRO_SERIALIZE_MEMBER_CHOOSE(s, bump_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux0_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux1_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux2_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux3_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux4_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux5_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux6_name);
    METRO_SERIALIZE_MEMBER_CHOOSE(s, aux7_name);
}

но я смог найти только исходники версии, где не было конвертера конфига оружия.

UPD: нашел ещё файл с текстурами texture_aliases.bin



Отправил в лс исходники за 18 апреля 2019

У меня вроде свежее исходники, но этой фишки нет.
Редактирование оружия появилось вроде как 2020 году.
Пост iOrange
В любом случае спасибо, посмотрю.
Перейти в начало страницы
 
Modera
сообщение 30.05.2021, 12:57
Сообщение #695


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

Репутация:   750  
Куратор темы
Сообщений: 7072
Регистрация: 30.07.2010




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


Цитата(TheStalkerNest @ 28.05.2021, 19:47) *
И да, есть-ли включение консоли под оригинальное метро?


Как включить консоль в оригинальном метро 2033
Код
#define _CRT_SECURE_NO_WARNINGS 1 // MSVS dno

#include <windows.h>
#include <string.h>
#include <stdio.h>

void (*real_clevel_r_on_key_press)(void *_this, int key, int arg2, int arg3);

void **g_console;
void (*uconsole_server_impl_show)(void *_this);

extern "C" void replace_clevel_r_on_key_press(int key, int arg2, int arg3);

__asm(
    ".text\n"
    ".global _replace_clevel_r_on_key_press\n"
    
    "_replace_clevel_r_on_key_press:\n"
    "movl 4(%esp), %eax;\n"
    "cmpl $0x27, %eax;\n"
    "jne not_console;\n"
    "pushl %ecx;\n"
    "movl (_g_console), %ecx;\n"
    "movl (%ecx), %ecx;\n"
    "movl (_uconsole_server_impl_show), %eax;\n"
    "call *%eax;\n"
    "popl %ecx;\n"
    "not_console:\n"
    "jmp *(_real_clevel_r_on_key_press);\n"
);

LPVOID SetHookEx(LPVOID address, LPVOID detour, int preserve)
{
#if defined(_M_IX86)

    #pragma pack(push,1)
    struct JMP
    {
        UINT8  mov_eax;
        UINT32 address;
        UINT16 jmp_eax;
    };
    #pragma pack(pop)

    struct JMP jmp =
    {
        0xB8,
        0x00000000,
        0xE0FF
    };

    CONST INT length = sizeof(struct JMP);
    DWORD oldProtection;

    char *code;

    code = (char*)LocalAlloc(LMEM_FIXED, preserve + length);
    memcpy(code, address, preserve);

    jmp.address = (UINT32)address + preserve;
    memcpy(code + preserve, &jmp, length);

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

    jmp.address = (UINT32)detour;
    memcpy(address, &jmp, length);

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

    return code;

#elif defined(_M_AMD64)

    #pragma pack(push,1)
    struct JMP
    {
        UINT16 mov_rax;
        UINT64 address;
        UINT16 jmp_rax;
    };
    #pragma pack(pop)

    struct JMP jmp =
    {
        0xB848,
        0x0000000000000000ull,
        0xE0FF
    };

    CONST INT length = sizeof(struct JMP);
    DWORD oldProtection;
    
    char *code;

    code = (char*)LocalAlloc(LMEM_FIXED, preserve + length);
    memcpy(code, address, preserve);
    
    jmp.address = (UINT64)address + preserve;
    memcpy(code + preserve, &jmp, length);
    
    if(VirtualProtect(code, preserve + length, PAGE_EXECUTE_READWRITE, &oldProtection) != TRUE)
    {
        free(code);
        return NULL;    
    }
    
    if (VirtualProtect(address, length, PAGE_EXECUTE_READWRITE, &oldProtection) != TRUE)
        return NULL;

    jmp.address = (UINT64)detour;
    memcpy(address, &jmp, length);

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

    return code;

#else
        #error Unknown processor acrhitecture
#endif
}

//
typedef HRESULT (WINAPI * LPFNDIRECTINPUT8CREATEPROC)(HINSTANCE, DWORD, REFIID, LPVOID, LPUNKNOWN);

HMODULE real_dinput8;
LPFNDIRECTINPUT8CREATEPROC real_DirectInput8Create;

#pragma comment(linker, "/export:DirectInput8Create@20=DirectInput8Create")
extern "C" __declspec(dllexport) HRESULT WINAPI DirectInput8Create(HINSTANCE hinst, DWORD dwversion, REFIID riidltf, LPVOID lpvout, LPUNKNOWN punkouter)
{
    if(!real_dinput8)
    {
        char path[512];
        GetSystemDirectory(path, sizeof(path));
        strcat(path, "\\dinput8.dll");

        real_dinput8 = LoadLibrary(path);
        real_DirectInput8Create = (LPFNDIRECTINPUT8CREATEPROC)GetProcAddress(real_dinput8, "DirectInput8Create");
    }
    
    {
        HMODULE hMetro2033 = GetModuleHandle("metro2033.exe");
        if(hMetro2033)
        {
            g_console = (void**)(LPBYTE(hMetro2033) + 0x00611214);
            LPVOID p0 = LPBYTE(hMetro2033) + 0x00444650; // uconsole::server_impl::show
            memcpy(&uconsole_server_impl_show, &p0, sizeof(void*));
            
            LPVOID p1 = LPBYTE(hMetro2033) + 0x002DB2F0; // clevel_r_on_key_press
            
            LPVOID code = SetHookEx(p1, LPVOID(replace_clevel_r_on_key_press), 12);
            memcpy(&real_clevel_r_on_key_press, &code, sizeof(void*));
        }
    }

    return real_DirectInput8Create(hinst, dwversion, riidltf, lpvout, punkouter);
}

BOOL DllMain(HINSTANCE hInstDLL, DWORD reason, LPVOID reserved)
{
    if(reason == DLL_PROCESS_ATTACH)
    {
    }
    
    return TRUE;
}


Для той же версии для которой я делал сохранение nav_map. Из за замутов с соглашениями о вызовах на 32-бит архитектуре пришлось написать на асме врезку, вместо красивенькой сишной функции. А так как я в этот раз применил компилятор GCC синтаксис ассемблера тут AT&T, надеюсь это не пугает.

Кстати для ласт лайта 2013 точно так же эта правка делается, только смещения другие.

Консолька в 2033 немного не так выглядит как в ласт лайте или редаксе scratch_one-s_head.gif

Но в ней хотя-бы есть интересная команда fly (аналог demo_record). В LL&Redux этой команды уже нет.
Команда refly (аналог demo_play) не работает dry.gif

Сообщение отредактировал Modera - 30.05.2021, 12:59
Перейти в начало страницы
 
TheStalkerNest
сообщение 30.05.2021, 13:17
Сообщение #696


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

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




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


Цитата(Modera @ 30.05.2021, 13:57) *
Цитата(TheStalkerNest @ 28.05.2021, 19:47) *
И да, есть-ли включение консоли под оригинальное метро?


Как включить консоль в оригинальном метро 2033
Код
#define _CRT_SECURE_NO_WARNINGS 1 // MSVS dno

#include <windows.h>
#include <string.h>
#include <stdio.h>

void (*real_clevel_r_on_key_press)(void *_this, int key, int arg2, int arg3);

void **g_console;
void (*uconsole_server_impl_show)(void *_this);

extern "C" void replace_clevel_r_on_key_press(int key, int arg2, int arg3);

__asm(
    ".text\n"
    ".global _replace_clevel_r_on_key_press\n"
    
    "_replace_clevel_r_on_key_press:\n"
    "movl 4(%esp), %eax;\n"
    "cmpl $0x27, %eax;\n"
    "jne not_console;\n"
    "pushl %ecx;\n"
    "movl (_g_console), %ecx;\n"
    "movl (%ecx), %ecx;\n"
    "movl (_uconsole_server_impl_show), %eax;\n"
    "call *%eax;\n"
    "popl %ecx;\n"
    "not_console:\n"
    "jmp *(_real_clevel_r_on_key_press);\n"
);

LPVOID SetHookEx(LPVOID address, LPVOID detour, int preserve)
{
#if defined(_M_IX86)

    #pragma pack(push,1)
    struct JMP
    {
        UINT8  mov_eax;
        UINT32 address;
        UINT16 jmp_eax;
    };
    #pragma pack(pop)

    struct JMP jmp =
    {
        0xB8,
        0x00000000,
        0xE0FF
    };

    CONST INT length = sizeof(struct JMP);
    DWORD oldProtection;

    char *code;

    code = (char*)LocalAlloc(LMEM_FIXED, preserve + length);
    memcpy(code, address, preserve);

    jmp.address = (UINT32)address + preserve;
    memcpy(code + preserve, &jmp, length);

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

    jmp.address = (UINT32)detour;
    memcpy(address, &jmp, length);

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

    return code;

#elif defined(_M_AMD64)

    #pragma pack(push,1)
    struct JMP
    {
        UINT16 mov_rax;
        UINT64 address;
        UINT16 jmp_rax;
    };
    #pragma pack(pop)

    struct JMP jmp =
    {
        0xB848,
        0x0000000000000000ull,
        0xE0FF
    };

    CONST INT length = sizeof(struct JMP);
    DWORD oldProtection;
    
    char *code;

    code = (char*)LocalAlloc(LMEM_FIXED, preserve + length);
    memcpy(code, address, preserve);
    
    jmp.address = (UINT64)address + preserve;
    memcpy(code + preserve, &jmp, length);
    
    if(VirtualProtect(code, preserve + length, PAGE_EXECUTE_READWRITE, &oldProtection) != TRUE)
    {
        free(code);
        return NULL;    
    }
    
    if (VirtualProtect(address, length, PAGE_EXECUTE_READWRITE, &oldProtection) != TRUE)
        return NULL;

    jmp.address = (UINT64)detour;
    memcpy(address, &jmp, length);

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

    return code;

#else
        #error Unknown processor acrhitecture
#endif
}

//
typedef HRESULT (WINAPI * LPFNDIRECTINPUT8CREATEPROC)(HINSTANCE, DWORD, REFIID, LPVOID, LPUNKNOWN);

HMODULE real_dinput8;
LPFNDIRECTINPUT8CREATEPROC real_DirectInput8Create;

#pragma comment(linker, "/export:DirectInput8Create@20=DirectInput8Create")
extern "C" __declspec(dllexport) HRESULT WINAPI DirectInput8Create(HINSTANCE hinst, DWORD dwversion, REFIID riidltf, LPVOID lpvout, LPUNKNOWN punkouter)
{
    if(!real_dinput8)
    {
        char path[512];
        GetSystemDirectory(path, sizeof(path));
        strcat(path, "\\dinput8.dll");

        real_dinput8 = LoadLibrary(path);
        real_DirectInput8Create = (LPFNDIRECTINPUT8CREATEPROC)GetProcAddress(real_dinput8, "DirectInput8Create");
    }
    
    {
        HMODULE hMetro2033 = GetModuleHandle("metro2033.exe");
        if(hMetro2033)
        {
            g_console = (void**)(LPBYTE(hMetro2033) + 0x00611214);
            LPVOID p0 = LPBYTE(hMetro2033) + 0x00444650; // uconsole::server_impl::show
            memcpy(&uconsole_server_impl_show, &p0, sizeof(void*));
            
            LPVOID p1 = LPBYTE(hMetro2033) + 0x002DB2F0; // clevel_r_on_key_press
            
            LPVOID code = SetHookEx(p1, LPVOID(replace_clevel_r_on_key_press), 12);
            memcpy(&real_clevel_r_on_key_press, &code, sizeof(void*));
        }
    }

    return real_DirectInput8Create(hinst, dwversion, riidltf, lpvout, punkouter);
}

BOOL DllMain(HINSTANCE hInstDLL, DWORD reason, LPVOID reserved)
{
    if(reason == DLL_PROCESS_ATTACH)
    {
    }
    
    return TRUE;
}


Для той же версии для которой я делал сохранение nav_map. Из за замутов с соглашениями о вызовах на 32-бит архитектуре пришлось написать на асме врезку, вместо красивенькой сишной функции. А так как я в этот раз применил компилятор GCC синтаксис ассемблера тут AT&T, надеюсь это не пугает.

Кстати для ласт лайта 2013 точно так же эта правка делается, только смещения другие.

Консолька в 2033 немного не так выглядит как в ласт лайте или редаксе scratch_one-s_head.gif

Но в ней хотя-бы есть интересная команда fly (аналог demo_record). В LL&Redux этой команды уже нет.
Команда refly (аналог demo_play) не работает dry.gif


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

А по поводу того, как она выглядит, то там просто текстура отличается. Лежит где-то в ресурсах. Хотя вижу, ещё шрифт отличается.

Сообщение отредактировал TheStalkerNest - 30.05.2021, 13:18
Перейти в начало страницы
 
Билдомассон
сообщение 30.05.2021, 15:35
Сообщение #697


Продвинутый геймер
********

Репутация:   9  
Группа: Участник
Сообщений: 201
Регистрация: 22.02.2020




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


Не экспортируются .mesh, а .model экспортируются. Так задумано или не допилили?
Перейти в начало страницы
 
Modera
сообщение 30.05.2021, 15:53
Сообщение #698


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

Репутация:   750  
Куратор темы
Сообщений: 7072
Регистрация: 30.07.2010




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


Просто нет потребности в таком функционале.
Перейти в начало страницы
 
Билдомассон
сообщение 30.05.2021, 15:58
Сообщение #699


Продвинутый геймер
********

Репутация:   9  
Группа: Участник
Сообщений: 201
Регистрация: 22.02.2020




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


Цитата(Modera @ 30.05.2021, 15:53) *
Просто нет потребности в таком функционале.

Жаль sad.gif .
Перейти в начало страницы
 
Лохотрон
сообщение 30.05.2021, 16:03
Сообщение #700


разраб одиночка
******************

Репутация:   2132  
Группа: Модератор
Сообщений: 3413
Награды: 13
Регистрация: 06.05.2004




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


Цитата(Modera @ 30.05.2021, 15:53) *
Просто нет потребности в таком функционале.
Хотел поинтересоваться, насколько вообще СДК функционален по части настройки ИИ на данный момент? Мобов спавнить можно без проблем? Для каких версий метра? Как там в нём по части "плиток" и логики у нпс? Или всё в зачаточном состоянии. Вижу утилиту от TheStalkerNest для генерации навмеша, оно имплементировано в сдк уже?


--------------------
Делай что должен и будь что будет.

Snake 3D | youtube #1 | youtube #2 | Rusgame | Patreon
Перейти в начало страницы
 
Modera
сообщение 30.05.2021, 16:40
Сообщение #701


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

Репутация:   750  
Куратор темы
Сообщений: 7072
Регистрация: 30.07.2010




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


Лохотрон, с АИ всё не очень хорошо, по пунктам:
1. Спаунить мобов/неписей на оригинальных картах можно в 2033, Last Light, Redux.
2. На полностью новых картах АИ можно создавать только в оригинальной 2033 версии, и то с оговорками
3. Совершенно не изучены укрытия (AI Cover), на новых картах без них не работают некоторые фишки, типа боя НПС с перемещением, и некоторые монстры
4. Блоки визуалскрипта далеко не все описаны для 2033 (54 из 221), для LL и Redux не описано вообще ничего.
5. Создавать навмеш для 2033 можно уже очень давно, просто раньше это работало только на одной конкретной версии игры
Перейти в начало страницы
 

43 страниц V  « < 33 34 35 36 37 > » 
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 19.04.2024, 19:51