PDA

Просмотр полной версии : Изучение и архитектура .rep файла катсцен


Kardini
02.03.2023, 02:12
Всем добрый день. Как-то раз я отписывал уже благодарность к Golod55 за его .doc файл с попыткой изучения катсцен. Это действительно хорошая работа, которая местами помогла нам продвинуться в нужном направлении.

А посему - настало время возвращать долги.

Пока что прикрепляю в виде ссылки на статью в ВК с описанием структуры, а так же прикладываю 2 скрипта
1. Скрипт на C# с использованием элементов Unity3d (Там Юнити отвязывается очень легко, но писал для себя в первую очередь)
2. Паттерн, для программы ImHex, позволяющий свободно через него загружать и вполне удобно редактировать Хексом любую уже имеющуюся катсцену.

Статья: https://vk.com/@mafiape-rozetskii-rep-kamen-katscen
В виде Word Документа https://disk.yandex.ru/i/QyUcafwcNOtqsQ
Забугорная English version https://disk.yandex.ru/d/fdRd5RE15Z0mFA

Пример
https://youtu.be/dN1wbrFiMr0

P.S. Как будут силы, сяду за написание того чего знаю в плане корректной интерпретации и чтения данной катсцены.

Kardini
04.03.2023, 19:58
Пока пытался понять логику переменных автомобиля - сделал вот такую упрощенную дебаг катсцену. Содержит всего 2 ключевых кадра для камеры и точки, куда камеры смотреть и 1 объект "автомобиль Томми" с 10 ключевыми кадрами.

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

Плохая новость - я хрен его знает что эти за unk Значения внутри машины.
Пока что из актуальных гипотез - похоже на флаги какие-то побитовые на самом деле. Например последний байт unk1 безумно похож на коробку передач. Я подозреваю, что они машины буквально в игре записывали как геймплей внутренним demo_record, который был вырезан после.

GOLOD55
05.03.2023, 13:40
Машины в роликах "играются" не как акторы, а как фреймы.
Так, чтобы сделать едущую машину, чехам пришлось перемещать\вращать ее запчасти как фреймы.
Отсюда, кстати вылезла проблема с неправильным положением кардверей в роликах у замененых моделей автов.

Kardini
06.03.2023, 07:39
Машины в роликах "играются" не как акторы, а как фреймы.
Так, чтобы сделать едущую машину, чехам пришлось перемещать\вращать ее запчасти как фреймы.
Отсюда, кстати вылезла проблема с неправильным положением кардверей в роликах у замененых моделей автов.

Я в сфере моддинга не так давно и не до конца понимаю логику движка LS3D. Объясните в чем разница actor и frame?
Для меня это 2 одинаковые вещи, потому что я отталкиваюсь от концепции Юнити3д как GameObject с позицией, кватернионом и внешними скриптами, которые могут на этот самый объект влиять.

Ну и да, те же колёса вращение как я заметил отрабатывает буквально сам код в авто у них в катсцене (под это нет ключевых кадров), который висит на машине и это не записывается в сами кадры. Как и эдакая симуляция трансмиссии в том числе.

GOLOD55
06.03.2023, 10:14
фрейм - енто объект, разные типы есть: модель, саунд, свет и т.п., а актор - все остальное: спецсвойства, напр. физика автов, поведение челов[задает список программ, которые доп-но обрабатывают объект].

Kardini
27.06.2023, 07:16
Вкачусь в эту тему, будет как небольшие дневники с заметкамим. Они менее посвящены катсценам, но плодить темы... Такое себе.

Есть у нас условный класс CHuman (Как он назывался в ваниле неизвестно). Он имеет в себе 2 переменные анимаций. Каждый номер отвечает за определённую анимацию.

Вот список, полученный реверсом, когда я экспериментировал с модификацией катсцен.
Публичный гугл документ со всем (https://docs.google.com/spreadsheets/d/1oYFwg5dhIMKGgGjhCm8gCh9PWRBCBYnNoHv4AQtoe3E/edit#gid=438657746)

С чем я именно вкатился еще дополнить? В Game.exe довольно хардкодом в самом конце записан этот самый список.
2470

GOLOD55
29.06.2023, 22:55
видны невооруженным взглядом над списком адрес каждой анимации, напр 248A6400 - адрес анимки pumpar.i3d

Kardini
30.06.2023, 05:08
видны невооруженным взглядом над списком адрес каждой анимации, напр 248A6400 - адрес анимки pumpar.i3d

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

Видеоролик к пояснениями. (https://youtu.be/HqC5XW0e4RY)
Таблица с номерами анимаций (https://docs.google.com/spreadsheets/d/1oBz5qs9ArfBIPMeHT-HAG6ekE4kBqOzenv30wQvv308/edit?usp=sharing)

Таблица с добавочными анимациями (https://docs.google.com/spreadsheets/d/1bkEH7L2CDmMwXhkE_D1w3sihJPImWLtzf94sLVC4LXU/edit?usp=sharing), которые кладутся поверх номерных.

Ну и напоследок по старой доброй памяти - список всех анимаций из катсцен (https://docs.google.com/spreadsheets/d/1x__UG-DJ5KJYKmElaE1T1MojeeMn8QEq1ECab5dVb6A/edit?usp=sharing).


Если есть какие-то вопросы на которые я могу ответить - буду рад подсказать :)

GOLOD55
30.06.2023, 10:14
а что за прога в ролике?

Kardini
30.06.2023, 11:14
а что за прога в ролике?

Binary Ninja. На рутрекере есть актуальная версия довольно неплохая
Программ сейчас 3 штуки основных.
IDA - сейчас лично для меня вообще не обновляется, безумно мощная, но боже, какая же она в плане использования новичками неудобная. Мне прям страшно её было запускать - безумный комбайн. В последний раз такой страх испытывал перед 3Ds Max на старте, да перед Фотошопом в детстве.
GHidra - безумно крутой, опенсурсный и бесплатный инструмент, но нет дебаггера для Мафии
Binary Ninja - платная (пирачу, грешен), но при этом актуальная и развивается тоже. И есть реалтайм дебаггер, работающий с игрой. В целом её интерфейс безумно простой, но при этом довольно наглядный. Безумно блин удобно внутри неё сразу все структуры прокидывать.

А, ну и конечно мой любимый Cheat Engine. Без него и 1/10 весёлых вещей я не смог бы найти.

GOLOD55
30.06.2023, 11:47
я IDA юзал для потрошения, но представление в С, смотрю, более глаз_френдли и могло облегчить понимание смысла написанного, в то время как IDA удобна для структурирования(в граф представлении).

Kardini
08.07.2023, 01:59
Забавный факт. Файлы .5ds анимаций содержат не только повороты, хех.

Я пока изучил лишь с анимацию перезарядки, автомата томпсона. Там имеется среди анимируемых объектов - объект под названием "notify" Отвечает за 2 важные вещи - отцепление левой руки персонажа от автомата (автомат перестает делать Look At на gun2), а так же именно там происходит вызов отсоединения обоймы.


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

GOLOD55
08.07.2023, 14:14
вероятно, спецобъект для синхронизации анимок оружки и чела.
кстати не факт что он нужен в игре, можно его переименовать и посмотреть как игра отреагирует.

Kardini
08.07.2023, 15:43
вероятно, спецобъект для синхронизации анимок оружки и чела.
кстати не факт что он нужен в игре, можно его переименовать и посмотреть как игра отреагирует.

Имя переименовать не пробовал, но если ту информацию, что он содержит забить нулями - анимация ломается

Kardini
09.07.2023, 18:01
вероятно, спецобъект для синхронизации анимок оружки и чела.
кстати не факт что он нужен в игре, можно его переименовать и посмотреть как игра отреагирует.

Нет, как ни странно нейминг имеет значение. Причем notify есть как объект в модельках персонажа. Если его переименовать - тоже буквально происходит поломка.

Допишу пока тут. В файлах .5ds notify имеет в начале ключевой флаг 0x10
После него идёт u16/short - кол-во ключевых кадров. size;
Дальше в виде u16/short - в каких именно кадрах массив кадров keyframes[size]
И после u16/short - идут сами эвенты. Кодировку ток начал расшифровывать. Всем желающим присоединиться - велком)

Kardini
29.08.2023, 03:04
Машины в роликах "играются" не как акторы, а как фреймы.
Так, чтобы сделать едущую машину, чехам пришлось перемещать\вращать ее запчасти как фреймы.
Отсюда, кстати вылезла проблема с неправильным положением кардверей в роликах у замененых моделей автов.

Так вот. Теперь после некоторого реверса игры некоторые вещи, к сожалению я вынужден оспорить. Автомобиль в катсцене является все еще тем же самым честным ActCar.
Он двигается *ультра* кастрированно, спору нет, этот весёлый аспект еще буду разбирать. Но все-же это Акт. В отличие от его дочерних запчастей тип дверей, руля и прочего.

И сразу же исправление базара. Происходит перемещение *И* фрейма и актора. Синхронное.

Pelerin
07.09.2023, 10:57
Забавный факт. Файлы .5ds анимаций содержат не только повороты, хех.

Я пока изучил лишь с анимацию перезарядки, автомата томпсона. Там имеется среди анимируемых объектов - объект под названием "notify" Отвечает за 2 важные вещи - отцепление левой руки персонажа от автомата (автомат перестает делать Look At на gun2), а так же именно там происходит вызов отсоединения обоймы.


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

У меня почему-то ассоциация с action в AnimationClip у Unity3D. Это скорее всего имя объекта в иерархии актора (как уже писали выше такой объект есть в самой модели). И скорее всего движок ищет на этом этом объекте что-то типа скрипта где написано что конкетно делать (тот самый LookAt или еще что-то)

Adilka
08.09.2023, 09:11
Забавный факт. Файлы .5ds анимаций содержат не только повороты, хех.

Я пока изучил лишь с анимацию перезарядки, автомата томпсона. Там имеется среди анимируемых объектов - объект под названием "notify" Отвечает за 2 важные вещи - отцепление левой руки персонажа от автомата (автомат перестает делать Look At на gun2), а так же именно там происходит вызов отсоединения обоймы.


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

В анриале anim_notify идет как знак того что надо что то сделать именно в этот момент анимации, например звук ходьбы, или заспавнить меш магазина оружия и т.д

GOLOD55
09.09.2023, 00:07
Нотифай можно перевести как "уведомление" наверно ога.
Программа оружия мелькала где-то, выследить ее несложно; также понятно почему раньше(и сейчас) сложности с заменой\добавлением оружки - оное захардкодено в немалое степени для оригмоделей(обоймы, откидывание ствола и пр.).

Haku
09.09.2023, 15:00
Нотифай можно перевести как "уведомление" наверно ога.
Программа оружия мелькала где-то, выследить ее несложно; также понятно почему раньше(и сейчас) сложности с заменой\добавлением оружки - оное захардкодено в немалое степени для оригмоделей(обоймы, откидывание ствола и пр.).

https://disk.yandex.ru/d/Op-ghBpQxhlVKg Predmety.def Editor там есть много неизвестных параметров. Хотя был где-то тутор от чехов кажется? Как добавить полноценное оружие в игру и чтобы оно при этом с небольшими глюками но работало.

Kardini
05.10.2023, 06:31
https://disk.yandex.ru/d/Op-ghBpQxhlVKg Predmety.def Editor там есть много неизвестных параметров. Хотя был где-то тутор от чехов кажется? Как добавить полноценное оружие в игру и чтобы оно при этом с небольшими глюками но работало.

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

Добавлено через 3 минуты
Давно не заходил, но тут распишу тогда. Думал это вообще никому не интересно, поэтому и не выкладывал изыскания.
notify - это "эвенты" из Юнити. То есть инициализация события из анимации.


У меня почему-то ассоциация с action в AnimationClip у Unity3D. Это скорее всего имя объекта в иерархии актора (как уже писали выше такой объект есть в самой модели). И скорее всего движок ищет на этом этом объекте что-то типа скрипта где написано что конкетно делать (тот самый LookAt или еще что-то)


Сами "события" зашиты и запрятаны в сам движок, тут спору нет
Я пошел от обратного - исследовал все файлы анимации тогда и составил вот такую таблицу, какой номер что именно означает. Авось кому-то пригодится.
https://docs.google.com/spreadsheets/d/1u2OBV5YtuiMYja0IB7DjRCPzuVIRTpVhIp9GS-X2yiE/edit?usp=sharing