IPB

>

Вскрытие ресурсов Метро 2033

 
 Panisher
сообщение 18.03.2010, 10:28
Сообщение #481


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

Группа: Забанен
Сообщений: 28
Регистрация: 22.10.2009
Пользователь №: 12736



Здесь технический разговор между создателями ПО на тему ресурсов игры.

ПО для работы с ресурсами игры

Обсуждение ПО для работы с ресурсами

Мелкие моды и фиксы

Моддинг. Общее обсуждение

Советы и решения

Работа с bump- и normalmaps (от iOrange)
В альфе лежит бамп, а в зеленом канале (если я правильно понял) лежит Gloss-Map (регулирующая силу specular-бликов).
Если Вам нужна normal-map, то бапм легко в нее превратить:
1) Качаем плагин nVidia для фотошопа (тыц)
2) Открываем в фотошопе интересующий бамп (например act\act_bab_body_bump.512.dds)
3) Выделяем все четыре канала (RGB + Alpha)
4) Жмем Filter->NVIDIA Tools->NormalMapFilter...
5) В появившемся окне в разделе Height Source выбираем Alpha Channel
6) Ставим нужный scale (я ставлю 10)
7) Жмем OK
8) Наслаждаемся результатом

(IMG:http://img.gameru.net/th/c49ec.gif)

(IMG:http://img.gameru.net/th/86f79.gif) (IMG:http://img.gameru.net/th/c0be6.gif)


Сообщение отредактировал Deimos - 20.04.2010, 17:01
Перейти в начало страницы
 
 
 
Ответов
 Prodnik
сообщение 28.11.2018, 22:50
Сообщение #482


Новичок
*

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



Цитата(Modera @ 22.11.2018, 02:21) *
Выкладываю декомпилятор конфигов. Вроде все level.bin'ы и конфиги из scripts.bin(не все) декомпилирует и компилирует. Но на работоспособность с игрой не проверял.

[attachment=4323:binunp.zip]
[attachment=4324:source.zip]

Как использовать:

декомпиляция level.bin
Код
binunp -l -d level.bin level.txt

компиляця level.bin
Код
binunp -l -c level.txt level.bin

декомпиляция отдельного конфига
Код
binunp -d имяфайла.bin имяфайла.txt

компиляция отдельного конфига
Код
binunp -c имяфайла.txt имяфайла.bin

Есть ещё ключ -k, по идее его надо указывать при компиляции если при декомпилции было написано kind = 3, вот так
Код
binunp -k 3 -c имяфайла.txt имяфайла.bin

Но это может быть и не обязательно, не проверял. Конфиги с kind = 3 это например файлы level.environment.

split.exe просто положить рядом с scripts.bin, запустить и появится папка Scripts с отдельными файлами.
Склеивателя Scripts.bin обратно не существует (IMG:style_emoticons/default/laugh.gif)

Кстати кто-нибудь понял как работают связи блоков в скриптах? (IMG:style_emoticons/default/smile.gif)

осталось только для ласт лайта, а так очень круто
Перейти в начало страницы
 
 
 JackieR
сообщение 28.11.2018, 22:59
Сообщение #483


Новичок
*

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



Цитата(Modera @ 14.11.2018, 02:56) *
Да, наверно это число не сильно важно, ну или я его угадал.
(IMG:https://images.gameru.net/thumb/37e696681f.jpg)

Как выяснилось формат вершин немного не такой как написано в metro2033-tools. Никакой W компоненты там нет, на её месте нормаль упакованный(следующие два значения очевидно тангент и бинормаль). Четвертой компонентой у нормаля хранится AO, так что его неплохо бы считать.

Не расскажешь как сделал? А то я уже пробовал менять оригинальные модельки местами, это скучно. Хочется чего нибудь своего добавить.
(IMG:https://images.gameru.net/thumb/bae3f34b5f.jpg)
Перейти в начало страницы
 
 
 Modera
сообщение 29.11.2018, 04:10
Сообщение #484


Игровой Бог
**********************

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



Цитата(Prodnik @ 28.11.2018, 22:50) *
осталось только для ласт лайта, а так очень круто

А в ластлайте конфиги разбираемые? (IMG:style_emoticons/default/smile.gif) Нет они конечно все разбираемые, но есть разница нежду тем чтобы написать один универсальный распаковщик или писать много-много для каждого конфига по отдельности, предварительно поковыряв движок дизассемблером.
Ии, нифига это не круто. Даже хуже чем сталкеровский ACDC. Вот если бы я какой-нибудь нормальный редактор адаптировал под 4A Engine, то это было бы круто. Бессмыслено, беспощадно, но круто.

Цитата(JackieR @ 28.11.2018, 22:59) *
Не расскажешь как сделал? А то я уже пробовал менять оригинальные модельки местами, это скучно. Хочется чего нибудь своего добавить.

Канешно расскажу. Сконвертировал модельку пальмы из OGF, а потом добавил на уровень скопировав какую-то сущность(entity) класса STATICPROP и помоняв ей модель и координаты в матрице.
Исходники конвертера моделей есть в исходниках распаковщика конфигов, но скомпиленую версию я не выкладывал. Может потом выложу.

Я тут уже немного продвинулся, теперь конвертировать можно сразу уровень в уровень, без всяких левых утилит. Вот огрызок агропрома на 4а Engine. (IMG:style_emoticons/default/biggrin.gif)
(IMG:https://images.gameru.net/thumb/082086e280.jpg)

Сообщение отредактировал Modera - 29.11.2018, 04:11
Перейти в начало страницы
 
 
 Cartoteka
сообщение 29.11.2018, 04:17
Сообщение #485


Почти Мастер
***********

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



Цитата(Modera @ 29.11.2018, 04:10) *
Вот огрызок агропрома на 4а Engine. biggrin.gif



Офигенно.

Эта котельная на каких движках только не успела побывать. На X-Ray, на Unreal, на id Tech 1, на Unity... теперь, вот, 4A Engine.
Перейти в начало страницы
 
 
 Modera
сообщение 29.11.2018, 04:25
Сообщение #486


Игровой Бог
**********************

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



Цитата(Cartoteka @ 29.11.2018, 04:17) *
Эта котельная на каких движках только не успела побывать. На X-Ray, на Unreal, на id Tech 1, на Unity... теперь, вот, 4A Engine.

Надо эту котельную признать идеальным тестовым уровнем. Чем-то вроде изображения Лены или чайника Юта.

Цитата(Cartoteka @ 22.11.2018, 06:30) *
Я слышал, что это можно сделать с трейнерами, но, может, кто-то знает более изящный способ?

Наверно с трейнерами и есть самый изящный.
Перейти в начало страницы
 
 
 Cartoteka
сообщение 29.11.2018, 04:27
Сообщение #487


Почти Мастер
***********

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



Цитата(Modera @ 29.11.2018, 04:25) *
Наверно с трейнерами и есть самый изящный.



Да мы уже сняли с Бартом тот новый ролик по Метро. Так что уже пока без надобности.
Перейти в начало страницы
 
 
 abramcumner
сообщение 29.11.2018, 08:56
Сообщение #488


Доктор Игровых Наук
*******************

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



Цитата(Modera @ 29.11.2018, 04:10) *
А в ластлайте конфиги разбираемые? (IMG:style_emoticons/default/smile.gif) Нет они конечно все разбираемые, но есть разница нежду тем чтобы написать один универсальный распаковщик или писать много-много для каждого конфига по отдельности, предварительно поковыряв движок дизассемблером.

В релизном ЛЛ разбираемые, в первом или втором апдейте разбираемость убрали. Редуксы снова разбираемые.
Перейти в начало страницы
 
 
 Prodnik
сообщение 29.11.2018, 15:00
Сообщение #489


Новичок
*

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



Цитата(abramcumner @ 29.11.2018, 08:56) *
Цитата(Modera @ 29.11.2018, 04:10) *
А в ластлайте конфиги разбираемые? (IMG:style_emoticons/default/smile.gif) Нет они конечно все разбираемые, но есть разница нежду тем чтобы написать один универсальный распаковщик или писать много-много для каждого конфига по отдельности, предварительно поковыряв движок дизассемблером.

В релизном ЛЛ разбираемые, в первом или втором апдейте разбираемость убрали. Редуксы снова разбираемые.

лучше сразу редуксы разбирать. У них с 33 и лл одинаковые движки и будет куда проще
Перейти в начало страницы
 
 
 JackieR
сообщение 29.11.2018, 21:25
Сообщение #490


Новичок
*

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



Цитата(Modera @ 29.11.2018, 04:10) *
Исходники конвертера моделей есть в исходниках распаковщика конфигов, но скомпиленую версию я не выкладывал. Может потом выложу.

Очень надеюсь что выложишь.

Сообщение отредактировал JackieR - 29.11.2018, 21:27
Перейти в начало страницы
 
 
 Modera
сообщение 01.12.2018, 05:33
Сообщение #491


Игровой Бог
**********************

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



Новая версия: Прикрепленный файл  binunp2.zip ( 163.19 килобайт ) Кол-во скачиваний: 12


Теперь умеет ещё декомпилировать некоторые неразбираемые конфиги, а именно textures.bin и environments.bin
Код
binunp -s textures.bin textures.txt
binunp -s environments.bin environments.txt

Ключ -k теперь может иметь значение 4, для компиляции неразбираемых конфигов:
Код
binunp -k 4 -c textures.txt textures.bin

У меня игра такой textures.bin вроде переварила, хотя я там ничего не менял, просто декомпилировал и обратно скомпилировал.

Утилита model конвертирует модели из OGF в формат metro 2033 и обратно:
Код
model -ogf2model model.ogf model.model
model -model2ogf model.model model.ogf

OGF модель должна быть не прогрессивной(легко исправить, но я забыл), и желательно с костью, в моделях без костей нет бинормалей и тангентов.
Ещё умеет конвертировать модель в nxcform_pc:
Код
model -model2nxcform_pc model.model model.nxcform_pc

Модели в уровень, указывать можно много
Код
model -model2level model1.model model2.model .. modelN.model leveldir

Уровень движка X-Ray в уровень 4A Engine, проверял вот этой картой: http://www.mediafire.com/file/dst6a565fwx7...May_15_2001.rar
Код
model -level2level xrayleveldir leveldir


В файлах shadersbytextures.txt и materialsbytextures.txt указывается какие шейдеры и материалы назначить в модели или уровне в зависимости от текстуры.
Какие шейдеры указывать можно узнать из конфига render_subst_all, материалы из game_materials. Конфиг материалов неразборный, но можно его открыть и поискать в нём строки начинающеися с materials\.
Текстуры в content можно класть прямо в формате .dds, движок их читает.

Сообщение отредактировал Modera - 01.12.2018, 05:36
Перейти в начало страницы
 
 
 Modera
сообщение 07.12.2018, 00:42
Сообщение #492


Игровой Бог
**********************

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



Цитата(Modera @ 22.11.2018, 02:21) *
Кстати кто-нибудь понял как работают связи блоков в скриптах? (IMG:style_emoticons/default/smile.gif)

Я понял. xD У каждого блока есть точки входа/выхода(так кажется это называется, не знаком с визуальных программированием).

Запись связи представляет собой [блок1, точка1, блок2, точка2].

Рассмотрим простой скрипт балалайки, у которой можно провести пальцем по струнам:
Скрипт
Код
        vss_ver_6 = begin
            count : u32 = 1;
            rec_0000 = begin
                groups : array;
                groups = begin
                    count : u32 = 0;
                end;
                blocks = begin
                    block_count : u32 = 4294967295;
                    'array with no key' : array;
                    count : u32 = 4;
                    block_0000 = begin
                        clsid : stringz = 'triggers/use';
                        posx : u16 = 105;
                        posy : u16 = 53;
                        active : bool = True;
                        entity : 'entity_link, uobject_link' = 65535;
                        initiator : 'entity_link, uobject_link' = 65535;
                        player : bool = True;
                        usage_distance : fp32 = 2;
                        use_action : choose;
                        use_action : stringz = '';
                        use_offset : vec2f = [0, -0.100000001490116];
                        blink : bool = True;
                        blink_distance : fp32 = 10;
                    end;
                    block_0001 = begin
                        clsid : stringz = 'entities/entity self';
                        posx : u16 = 207;
                        posy : u16 = 62;
                    end;
                    block_0002 = begin
                        clsid : stringz = 'actions/play sound';
                        posx : u16 = 160;
                        posy : u16 = 53;
                        sound : sound;
                        sound : stringz = 'objects\usable_items\balalayka_use';
                        volume : fp32 = 1;
                        instant : bool = True;
                        ai_sound_type : u32 = 0;
                        stop_interval : fp32 = 0.5;
                        startus_intervalus : fp32 = 0;
                        looped : bool = False;
                        enable_slowmo : bool = True;
                        enable_fx : bool = True;
                        play_as_music : bool = False;
                    end;
                    block_0003 = begin
                        clsid : stringz = 'entities/entity ref';
                        posx : u16 = 162;
                        posy : u16 = 102;
                        target : 'entity_link, uobject_link' = 47361;
                    end;
                end;
                link_count : u32 = 5;
                0 : vec4s16 = [0, 0, 2, 0];
                1 : vec4s16 = [0, 0, 0, 1];
                2 : vec4s16 = [0, 2, 3, 0];
                3 : vec4s16 = [2, 0, 1, 0];
                4 : vec4s16 = [2, 2, 0, 0];
            end;
        end;


Как у любой программы, у этой есть точка входа. Ей является триггер на использование, блок0.
Первая связь: блок0, точка0, блок2, точка0. Точка0 у триггера срабатывает при использовании и выполняет блок2. Блок2 это проигрывание звука.
Вторая связь: блок0, точка0, блок0, точка1. Точка1 при входе в неё выключает триггер(параметр active), если убрать то по балалайке можно будет колотить без пауз.
Третья связь: блок0, точка2, блок3, точка0. Эта свзять указывает какой объект нужно поюзать, чтобы сработал триггер. Можно указать блок1(сама балалайка), но тут почему-то указан какой-то левый объект из блока3.
Четвёртая связь: блок2, точка0, блок1, точка0. Это свзять указывает из какого объекта нужно проиграть звук для блока2.
Пятая связь: блок2, точка2, блок0, точка0. Эта связь включает обрано триггер. Очевидно точка2 у блока проигрывания звука срабатывает по окончании звука. Ещё очевидно что точки имеют разное назначение на вход и на выход.

Весьма сложно. Страшно представить как этот язык игрой интерпретируется.

Сообщение отредактировал Modera - 07.12.2018, 00:42
Перейти в начало страницы
 
 
 Дизель
сообщение 07.12.2018, 00:46
Сообщение #493


Игрок
***

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



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

Сообщение отредактировал Дизель - 07.12.2018, 00:46
Перейти в начало страницы
 
 
 abramcumner
сообщение 07.12.2018, 01:22
Сообщение #494


Доктор Игровых Наук
*******************

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



Цитата(Modera @ 07.12.2018, 00:42) *
Весьма сложно. Страшно представить как этот язык игрой интерпретируется.

Почему? Обычные сигнал/слоты или обычные события и подписка на них.

Раньше в движке названия точек лежали, думаю и сейчас тоже.
Перейти в начало страницы
 
 
 Modera
сообщение 08.12.2018, 20:21
Сообщение #495


Игровой Бог
**********************

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



Цитата(abramcumner @ 07.12.2018, 01:22) *
Почему? Обычные сигнал/слоты или обычные события и подписка на них.

Хм, ну если о блоках думать как о объектах обменивающихся друг с другом сообщениями то да, уже не так сложно, как мне раньше показалось. А интерпретатора наверное вообще нет, вместо него какой-нибудь обновлятор блоков(шедулер), т.к. язык оказывается многопоточный. Например с такой программой:
(IMG:https://images.gameru.net/thumb/1ee734f090.gif)
Будут проигрыватся два разных звука с разной частотой повторения. Стрелки из триггера не передают управление другим блокам, они их активируют. Напоминает описание smalltalk'а, про то что каждый объект как отдельный компьютер. (IMG:style_emoticons/default/smile.gif)

4A всё-таки крутой движок. (IMG:style_emoticons/default/smile.gif)
Перейти в начало страницы
 
 
 abramcumner
сообщение 08.12.2018, 22:12
Сообщение #496


Доктор Игровых Наук
*******************

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



Цитата(Modera @ 08.12.2018, 20:21) *
вместо него какой-нибудь обновлятор блоков(шедулер),

Ну да, можно на каждом фрейме опрашивать активные блоки. На самом деле схеме нужно обновлять максимум logic/delay, триггер и проигрыватель работают чисто по сигналам.
Ну и многопоточность для схемы выше вообще не нужна, проигрыватель отправил звук на воспроизведение и свободен, можно опрашивать следующие блоки.
Перейти в начало страницы
 
 
 JackieR
сообщение 12.12.2018, 00:09
Сообщение #497


Новичок
*

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



Цитата(Modera @ 22.11.2018, 02:21) *
Выкладываю декомпилятор конфигов. Вроде все level.bin'ы и конфиги из scripts.bin(не все) декомпилирует и компилирует. Но на работоспособность с игрой не проверял.

Работает. Занятно, для некоторых людей и мутантов нужно прописывать ещё и анимации. Иначе они будут спавниться в Т-позах либо просто стоять на месте.



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

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

 

Текстовая версия Сейчас: 15.12.2018, 01:05